GZipStream クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
GZip データ形式の仕様を使ってストリームを圧縮および圧縮解除するために使用するメソッドとプロパティを提供します。
public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
inherit Stream
Public Class GZipStream
Inherits Stream
- 継承
- 継承
例
次の例は、GZipStream クラスを使用して、ディレクトリにあるファイルを圧縮および展開する方法を示します。
using System;
using System.IO;
using System.IO.Compression;
public class FileCompressionModeExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private const string OriginalFileName = "original.txt";
private const string CompressedFileName = "compressed.gz";
private const string DecompressedFileName = "decompressed.txt";
public static void Run()
{
CreateFileToCompress();
CompressFile();
DecompressFile();
PrintResults();
DeleteFiles();
/*
Output:
The original file 'original.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
The compressed file 'compressed.gz' is 283 bytes.
The decompressed file 'decompressed.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
*/
}
private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);
private static void CompressFile()
{
using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
using FileStream compressedFileStream = File.Create(CompressedFileName);
using var compressor = new GZipStream(compressedFileStream, CompressionMode.Compress);
originalFileStream.CopyTo(compressor);
}
private static void DecompressFile()
{
using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open);
using FileStream outputFileStream = File.Create(DecompressedFileName);
using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress);
decompressor.CopyTo(outputFileStream);
}
private static void PrintResults()
{
long originalSize = new FileInfo(OriginalFileName).Length;
long compressedSize = new FileInfo(CompressedFileName).Length;
long decompressedSize = new FileInfo(DecompressedFileName).Length;
Console.WriteLine($"The original file '{OriginalFileName}' is {originalSize} bytes. Contents: \"{File.ReadAllText(OriginalFileName)}\"");
Console.WriteLine($"The compressed file '{CompressedFileName}' is {compressedSize} bytes.");
Console.WriteLine($"The decompressed file '{DecompressedFileName}' is {decompressedSize} bytes. Contents: \"{File.ReadAllText(DecompressedFileName)}\"");
}
private static void DeleteFiles()
{
File.Delete(OriginalFileName);
File.Delete(CompressedFileName);
File.Delete(DecompressedFileName);
}
}
Imports System
Imports System.IO
Imports System.IO.Compression
Public Class FileCompressionModeExample
Private Const Message As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
Private Const OriginalFileName As String = "original.txt"
Private Const CompressedFileName As String = "compressed.gz"
Private Const DecompressedFileName As String = "decompressed.txt"
Public Shared Sub Main()
CreateFileToCompress()
CompressFile()
DecompressFile()
PrintResults()
DeleteFiles()
' Output:
' The original file 'original.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
' The compressed file 'compressed.gz' weighs 283 bytes.
' The decompressed file 'decompressed.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
End Sub
Private Shared Sub CreateFileToCompress()
File.WriteAllText(OriginalFileName, Message)
End Sub
Private Shared Sub CompressFile()
Using originalFileStream As FileStream = File.Open(OriginalFileName, FileMode.Open)
Using compressedFileStream As FileStream = File.Create(CompressedFileName)
Using compressor = New GZipStream(compressedFileStream, CompressionMode.Compress)
originalFileStream.CopyTo(compressor)
End Using
End Using
End Using
End Sub
Private Shared Sub DecompressFile()
Using compressedFileStream As FileStream = File.Open(CompressedFileName, FileMode.Open)
Using outputFileStream As FileStream = File.Create(DecompressedFileName)
Using decompressor = New GZipStream(compressedFileStream, CompressionMode.Decompress)
decompressor.CopyTo(outputFileStream)
End Using
End Using
End Using
End Sub
Private Shared Sub PrintResults()
Dim originalSize As Long = New FileInfo(OriginalFileName).Length
Dim compressedSize As Long = New FileInfo(CompressedFileName).Length
Dim decompressedSize As Long = New FileInfo(DecompressedFileName).Length
Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes. Contents: ""{File.ReadAllText(OriginalFileName)}""")
Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.")
Console.WriteLine($"The decompressed file '{DecompressedFileName}' weighs {decompressedSize} bytes. Contents: ""{File.ReadAllText(DecompressedFileName)}""")
End Sub
Private Shared Sub DeleteFiles()
File.Delete(OriginalFileName)
File.Delete(CompressedFileName)
File.Delete(DecompressedFileName)
End Sub
End Class
注釈
このクラスは、ロスレス ファイルの圧縮と圧縮解除に業界標準のアルゴリズムを使用する gzip データ形式を表します。 この形式には、データ破損を検出するための巡回冗長チェック値が含まれています。 gzip データ形式では クラスと同じアルゴリズムが使用されますが、他の DeflateStream 圧縮形式を使用するように拡張できます。 この形式は、特許の対象外の方法で容易に実装できます。
.NET Framework 4.5 以降では、 クラスはDeflateStream圧縮に zlib ライブラリを使用します。 その結果、より優れた圧縮アルゴリズムが提供され、ほとんどの場合、以前のバージョンの.NET Frameworkよりも小さい圧縮ファイルが提供されます。
GZipStream.gzの拡張子を持つファイルに書き込まれた圧縮オブジェクトは、多くの一般的な圧縮ツールを使用して圧縮解除できます。ただし、このクラスは本質的に zip アーカイブにファイルを追加したり、zip アーカイブからファイルを抽出したりするための機能を提供しません。
DeflateStream と GZipStream の圧縮機能は、ストリームとして公開されます。 データはバイト単位で読み取られます。そのため、複数のパスを実行して、ファイル全体または大きなデータ ブロックを圧縮するための最適な方法を決定することはできません。 DeflateStream と GZipStream クラスは、圧縮されていないデータ ソースで最もよく使用されます。 ソース データが既に圧縮されている場合、これらのクラスを使用すると、実際にはストリームのサイズが大きくなります。
注意 (継承者)
から GZipStream継承する場合は、次のメンバーをオーバーライドする必要があります: CanSeek、 CanWrite、および CanRead。
コンストラクター
GZipStream(Stream, CompressionLevel) |
指定したストリームと圧縮レベルを使用して、GZipStream クラスの新しいインスタンスを初期化します。 |
GZipStream(Stream, CompressionLevel, Boolean) |
指定したストリームと圧縮レベルを使用して GZipStream クラスの新しいインスタンスを初期化し、必要に応じて、ストリームを開いたままにします。 |
GZipStream(Stream, CompressionMode) |
指定したストリームと圧縮モードを使用して、GZipStream クラスの新しいインスタンスを初期化します。 |
GZipStream(Stream, CompressionMode, Boolean) |
指定したストリームと圧縮モードを使用して GZipStream クラスの新しいインスタンスを初期化し、必要に応じて、ストリームを開いたままにします。 |
プロパティ
BaseStream |
基になるストリームへの参照を取得します。 |
CanRead |
ファイルの圧縮解除中にストリームが読み取りをサポートするかどうかを示す値を取得します。 |
CanSeek |
ストリームがシークをサポートしているかどうかを示す値を取得します。 |
CanTimeout |
現在のストリームがタイムアウトできるかどうかを決定する値を取得します。 (継承元 Stream) |
CanWrite |
ストリームが書き込みをサポートしているかどうかを示す値を取得します。 |
Length |
このプロパティはサポートされていないため、常に NotSupportedException をスローします。 |
Position |
このプロパティはサポートされていないため、常に NotSupportedException をスローします。 |
ReadTimeout |
ストリームがタイムアウト前に読み取りを試みる期間を決定する値 (ミリ秒単位) を取得または設定します。 (継承元 Stream) |
WriteTimeout |
ストリームがタイムアウト前に書き込みを試行する期間を決定する値 (ミリ秒単位) を取得または設定します。 (継承元 Stream) |
メソッド
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期の読み込み動作を開始します。 (代わりに、ReadAsync(Byte[], Int32, Int32) メソッドの使用を検討します)。 |
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期の読み込み動作を開始します。 (代わりに、ReadAsync(Byte[], Int32, Int32) の使用を検討してください。) (継承元 Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期の書き込み操作を開始します。 (代わりに、WriteAsync(Byte[], Int32, Int32) メソッドの使用を検討します)。 |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期の書き込み操作を開始します。 (代わりに、WriteAsync(Byte[], Int32, Int32) の使用を検討してください。) (継承元 Stream) |
Close() |
現在のストリームを閉じ、現在のストリームに関連付けられているすべてのリソース (ソケット、ファイル ハンドルなど) を解放します。 このメソッドを呼び出す代わりに、ストリームが適切に破棄されていることを確認します。 (継承元 Stream) |
CopyTo(Stream) |
現在のストリームからバイトを読み取り、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyTo(Stream, Int32) |
現在の GZip ストリームからバイトを読み取り、指定したバッファー サイズを使用して別のストリームに書き込みます。 |
CopyTo(Stream, Int32) |
指定されたバッファー サイズを使用して、現在のストリームからバイトを読み取り、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream) |
現在のストリームからすべてのバイトを非同期に読み取り、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, CancellationToken) |
指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、指定されたキャンセル トークンを使用して、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, Int32) |
指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
指定のバッファー サイズを使用して、現在の GZip ストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 |
CopyToAsync(Stream, Int32, CancellationToken) |
指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、指定されたバッファー サイズとキャンセル トークンを使用して、別のストリームに書き込みます。 両方のストリーム位置は、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CreateObjRef(Type) |
リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 (継承元 MarshalByRefObject) |
CreateWaitHandle() |
古い.
古い.
古い.
WaitHandle オブジェクトを割り当てます。 (継承元 Stream) |
Dispose() |
Stream によって使用されているすべてのリソースを解放します。 (継承元 Stream) |
Dispose(Boolean) |
GZipStream によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。 |
DisposeAsync() |
GZipStream によって使用されているアンマネージ リソースを非同期に解放します。 |
DisposeAsync() |
Stream によって使用されているアンマネージ リソースを非同期に解放します。 (継承元 Stream) |
EndRead(IAsyncResult) |
保留中の非同期読み取りが完了するまで待機します。 (代わりに、ReadAsync(Byte[], Int32, Int32) メソッドの使用を検討します)。 |
EndRead(IAsyncResult) |
保留中の非同期読み取りが完了するまで待機します。 (代わりに、ReadAsync(Byte[], Int32, Int32) の使用を検討してください。) (継承元 Stream) |
EndWrite(IAsyncResult) |
非同期書き込み操作の終了を処理します。 (代わりに、WriteAsync(Byte[], Int32, Int32) メソッドの使用を検討します)。 |
EndWrite(IAsyncResult) |
非同期書き込み操作を終了します。 (代わりに、WriteAsync(Byte[], Int32, Int32) の使用を検討してください。) (継承元 Stream) |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Flush() |
内部バッファーをフラッシュします。 |
FlushAsync() |
ストリームに対応するすべてのバッファーを非同期にクリアし、バッファー内のデータを基になるデバイスに書き込みます。 (継承元 Stream) |
FlushAsync(CancellationToken) |
この GZip ストリームに対応するすべてのバッファーを非同期にクリアし、バッファー内のデータを基になるデバイスに書き込み、キャンセル要求を監視します。 |
FlushAsync(CancellationToken) |
ストリームに対応するすべてのバッファーを非同期にクリアし、バッファー内のデータを基になるデバイスに書き込み、キャンセル要求を監視します。 (継承元 Stream) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetLifetimeService() |
古い.
対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
InitializeLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
ObjectInvariant() |
古い.
Contract のサポートを提供します。 (継承元 Stream) |
Read(Byte[], Int32, Int32) |
圧縮解除されたバイト数を、指定したバイト配列に読み取ります。 |
Read(Span<Byte>) |
現在の GZip ストリームからバイト スパンにバイト シーケンスを読み取り、読み取られたバイト数だけ GZip ストリーム内の位置を進めます。 |
Read(Span<Byte>) |
派生クラスによってオーバーライドされた場合は、現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリームの位置を進めます。 (継承元 Stream) |
ReadAsync(Byte[], Int32, Int32) |
現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進めます。 (継承元 Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
現在の GZip ストリームからバイト配列にバイト シーケンスを非同期に読み取り、読み取られたバイト数だけ GZip ストリーム内の位置を進め、キャンセル要求を監視します。 |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
現在の GZip ストリームからバイト メモリ領域にバイト シーケンスを非同期に読み取り、読み取られたバイト数だけ GZip ストリーム内の位置を進め、キャンセル要求を監視します。 |
ReadAsync(Memory<Byte>, CancellationToken) |
現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
現在のストリームから少なくともバイト数を読み取り、ストリーム内の位置を読み取ったバイト数だけ進めます。 (継承元 Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
現在のストリームから少なくとも最小バイト数を非同期に読み取り、読み取られたバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
ReadByte() |
ストリームから 1 バイトを読み取り、GZip ストリーム内の位置を 1 バイト進めます。GZip ストリームの末尾の場合は -1 を返します。 |
ReadByte() |
ストリームから 1 バイトを読み取り、ストリーム内の位置を 1 バイト進めます。ストリームの末尾の場合は -1 を返します。 (継承元 Stream) |
ReadExactly(Byte[], Int32, Int32) |
現在のストリームからバイト数を読み取 |
ReadExactly(Span<Byte>) |
現在のストリームからバイトを読み取り、 が入力されるまでストリーム内の位置を |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリームからバイト数を非同期に読み取 |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
現在のストリームからバイトを非同期に読み取り、 が満たされるまでストリーム内の位置を |
Seek(Int64, SeekOrigin) |
このプロパティはサポートされていないため、常に NotSupportedException をスローします。 |
SetLength(Int64) |
このプロパティはサポートされていないため、常に NotSupportedException をスローします。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
Write(Byte[], Int32, Int32) |
圧縮されたバイトを、指定されたバイト配列から、基になる GZip ストリームに書き込みます。 |
Write(ReadOnlySpan<Byte>) |
読み取り専用バイト スパンから現在の GZip ストリームにバイト シーケンスを書き込み、書き込まれたバイト数だけこの GZip ストリーム内の現在位置を進めます。 |
Write(ReadOnlySpan<Byte>) |
派生クラスによってオーバーライドされた場合は、現在のストリームにバイト シーケンスを書き込み、書き込んだバイト数の分だけストリームの現在位置を進めます。 (継承元 Stream) |
WriteAsync(Byte[], Int32, Int32) |
現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進めます。 (継承元 Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
圧縮されたバイトを、指定のバイト配列から、基になる GZip ストリームに非同期で書き込みます。 |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
圧縮されたバイトを、指定された読み取り専用バイト メモリ領域から、基になる GZip ストリームに非同期で書き込みます。 |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
WriteByte(Byte) |
現在の GZip ストリームにバイトを書き込み、この GZip ストリーム内の現在の位置を 1 つずつ進めます。 |
WriteByte(Byte) |
ストリームの現在位置にバイトを書き込み、ストリームの位置を 1 バイトだけ進めます。 (継承元 Stream) |
拡張メソッド
CopyToAsync(Stream, PipeWriter, CancellationToken) |
キャンセル トークンを使用して、Stream からバイトを非同期で読み取り、指定した PipeWriter に書き込みます。 |
AsInputStream(Stream) |
Windows ストア アプリ用 .NET のマネージド ストリームを Windows ランタイムの入力ストリームに変換します。 |
AsOutputStream(Stream) |
Windows ストア アプリ用 .NET のマネージド ストリームを Windows ランタイムの出力ストリームに変換します。 |
AsRandomAccessStream(Stream) |
特定のストリームをランダム アクセス ストリームに変換します。 |
ConfigureAwait(IAsyncDisposable, Boolean) |
非同期の破棄可能から返されるタスク上での待機がどのように実行されるかを構成します。 |
適用対象
こちらもご覧ください
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示