次の方法で共有


DeflateStream クラス

定義

Deflate アルゴリズムを使用してストリームを圧縮および展開するためのメソッドとプロパティを提供します。

public ref class DeflateStream : System::IO::Stream
public class DeflateStream : System.IO.Stream
type DeflateStream = class
    inherit Stream
Public Class DeflateStream
Inherits Stream
継承
DeflateStream
継承

次の例は、DeflateStream クラスを使用してファイルを圧縮および展開する方法を示しています。

using System;
using System.IO;
using System.IO.Compression;

public static 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.dfl";
    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.dfl' is 265 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 DeflateStream(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 DeflateStream(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.IO
Imports System.IO.Compression

Module 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.dfl"
    Private Const DecompressedFileName As String = "decompressed.txt"

    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.dfl' weighs 265 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 Sub CreateFileToCompress()
        File.WriteAllText(OriginalFileName, Message)
    End Sub

    Private Sub CompressFile()
        Using originalFileStream As FileStream = File.Open(OriginalFileName, FileMode.Open)
            Using compressedFileStream As FileStream = File.Create(CompressedFileName)
                Using compressor = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                    originalFileStream.CopyTo(compressor)
                End Using
            End Using
        End Using
    End Sub

    Private Sub DecompressFile()
        Using compressedFileStream As FileStream = File.Open(CompressedFileName, FileMode.Open)
            Using outputFileStream As FileStream = File.Create(DecompressedFileName)
                Using decompressor = New DeflateStream(compressedFileStream, CompressionMode.Decompress)
                    decompressor.CopyTo(outputFileStream)
                End Using
            End Using
        End Using
    End Sub

    Private 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 Sub DeleteFiles()
        File.Delete(OriginalFileName)
        File.Delete(CompressedFileName)
        File.Delete(DecompressedFileName)
    End Sub
End Module

注釈

このクラスは Deflate アルゴリズムを表します。これは、損失のないファイルの圧縮と展開のための業界標準のアルゴリズムです。 .NET Framework 4.5 以降、DeflateStream クラスは zlib ライブラリを使用します。 その結果、より優れた圧縮アルゴリズムが提供され、ほとんどの場合、以前のバージョンの .NET Framework よりも小さい圧縮ファイルが提供されます。

このクラスは、本質的に zip アーカイブにファイルを追加したり、zip アーカイブからファイルを抽出したりするための機能を提供しません。 zip アーカイブを使用するには、ZipArchive クラスと ZipArchiveEntry クラスを使用します。

DeflateStream クラスは、GZipStream クラスで使用される gzip データ形式と同じ圧縮アルゴリズムを使用します。

DeflateStream および GZipStream の圧縮機能は、ストリームとして公開されます。 データはバイト単位で読み取られます。そのため、複数のパスを実行して、ファイル全体または大きなデータ ブロックを圧縮するための最適な方法を決定することはできません。 DeflateStream クラスと GZipStream クラスは、圧縮されていないデータ ソースで最適に使用されます。 ソース データが既に圧縮されている場合、これらのクラスを使用すると、実際にはストリームのサイズが大きくなる可能性があります。

コンストラクター

DeflateStream(Stream, CompressionLevel)

指定したストリームと圧縮レベルを使用して、DeflateStream クラスの新しいインスタンスを初期化します。

DeflateStream(Stream, CompressionLevel, Boolean)

指定したストリームと圧縮レベルを使用して、DeflateStream クラスの新しいインスタンスを初期化し、必要に応じてストリームを開いたままにします。

DeflateStream(Stream, CompressionMode)

指定したストリームおよび圧縮モードを使用して、DeflateStream クラスの新しいインスタンスを初期化します。

DeflateStream(Stream, CompressionMode, Boolean)

指定したストリームと圧縮モードを使用して、DeflateStream クラスの新しいインスタンスを初期化し、必要に応じてストリームを開いたままにします。

プロパティ

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)

現在の Deflate ストリームからバイトを読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。

CopyTo(Stream, Int32)

現在のストリームからバイトを読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream)
CopyToAsync(Stream)

現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream)
CopyToAsync(Stream, CancellationToken)

現在のストリームからバイトを非同期に読み取り、指定されたキャンセル トークンを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream)
CopyToAsync(Stream, Int32)

現在のストリームからバイトを非同期に読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream)
CopyToAsync(Stream, Int32, CancellationToken)

現在の Deflate ストリームからバイトを非同期に読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。

CopyToAsync(Stream, Int32, CancellationToken)

指定したバッファー サイズとキャンセル トークンを使用して、現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。

(継承元 Stream)
CreateObjRef(Type)

リモート オブジェクトとの通信に使用されるプロキシの生成に必要なすべての関連情報を含むオブジェクトを作成します。

(継承元 MarshalByRefObject)
CreateWaitHandle()
古い.
古い.
古い.

WaitHandle オブジェクトを割り当てます。

(継承元 Stream)
Dispose()

Streamで使用されているすべてのリソースを解放します。

(継承元 Stream)
Dispose(Boolean)

DeflateStream によって使用されるアンマネージ リソースを解放し、必要に応じてマネージド リソースを解放します。

DisposeAsync()

DeflateStreamによって使用されるアンマネージ リソースを非同期的に解放します。

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)

この Deflate ストリームのすべてのバッファーを非同期的にクリアし、バッファー内のデータを基になるデバイスに書き込み、取り消し要求を監視します。

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>)

現在の Deflate ストリームからバイト スパンにバイト シーケンスを読み取り、読み取ったバイト数だけ Deflate ストリーム内の位置を進めます。

Read(Span<Byte>)

派生クラスでオーバーライドされると、現在のストリームからバイトシーケンスを読み取り、読み取られたバイト数だけストリーム内の位置を進めます。

(継承元 Stream)
ReadAsync(Byte[], Int32, Int32)

現在のストリームからバイト シーケンスを非同期に読み取り、ストリーム内の位置を読み取ったバイト数だけ進めます。

(継承元 Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

現在の Deflate ストリームからバイト シーケンスを非同期に読み取り、バイト配列に書き込み、読み取ったバイト数だけ Deflate ストリーム内の位置を進め、キャンセル要求を監視します。

ReadAsync(Byte[], Int32, Int32, CancellationToken)

現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、取り消し要求を監視します。

(継承元 Stream)
ReadAsync(Memory<Byte>, CancellationToken)

現在の Deflate ストリームからバイト シーケンスを非同期に読み取り、バイト メモリ範囲に書き込み、読み取ったバイト数だけ Deflate ストリーム内の位置を進め、キャンセル要求を監視します。

ReadAsync(Memory<Byte>, CancellationToken)

現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、取り消し要求を監視します。

(継承元 Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

現在のストリームから少なくともバイト数を読み取り、読み取ったバイト数だけストリーム内の位置を進めます。

(継承元 Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

現在のストリームから少なくとも最小バイト数を非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。

(継承元 Stream)
ReadByte()

Deflate ストリームからバイトを読み取り、ストリーム内の位置を 1 バイト進めるか、Deflate ストリームの末尾にある場合は -1 を返します。

ReadByte()

ストリームからバイトを読み取り、ストリーム内の位置を 1 バイト進めるか、ストリームの末尾にある場合は -1 を返します。

(継承元 Stream)
ReadExactly(Byte[], Int32, Int32)

現在のストリーム count バイト数を読み取り、ストリーム内の位置を進めます。

(継承元 Stream)
ReadExactly(Span<Byte>)

現在のストリームからバイトを読み取り、buffer がいっぱいになるまでストリーム内の位置を進めます。

(継承元 Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

現在のストリーム count バイト数を非同期に読み取り、ストリーム内の位置を進め、キャンセル要求を監視します。

(継承元 Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

現在のストリームからバイトを非同期に読み取り、buffer がいっぱいになるまでストリーム内の位置を進め、取り消し要求を監視します。

(継承元 Stream)
Seek(Int64, SeekOrigin)

この操作はサポートされておらず、常に NotSupportedExceptionをスローします。

SetLength(Int64)

この操作はサポートされておらず、常に NotSupportedExceptionをスローします。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
Write(Byte[], Int32, Int32)

指定したバイト配列から基になるストリームに圧縮バイトを書き込みます。

Write(ReadOnlySpan<Byte>)

現在の Deflate ストリームにバイト シーケンスを書き込み、書き込まれたバイト数だけこの Deflate ストリーム内の現在位置を進めます。

Write(ReadOnlySpan<Byte>)

派生クラスでオーバーライドされると、現在のストリームにバイト シーケンスを書き込み、書き込まれたバイト数だけこのストリーム内の現在の位置を進めます。

(継承元 Stream)
WriteAsync(Byte[], Int32, Int32)

現在のストリームにバイト シーケンスを非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進めます。

(継承元 Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

圧縮されたバイトを、指定したバイト配列から基になる Deflate ストリームに非同期的に書き込みます。

WriteAsync(Byte[], Int32, Int32, CancellationToken)

現在のストリームにバイトシーケンスを非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進め、キャンセル要求を監視します。

(継承元 Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

指定した読み取り専用メモリ領域から基になる Deflate ストリームに圧縮バイトを非同期に書き込みます。

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

現在のストリームにバイトシーケンスを非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進め、キャンセル要求を監視します。

(継承元 Stream)
WriteByte(Byte)

現在の Deflate ストリームにバイトを書き込み、この Deflate ストリーム内の現在位置を 1 ずつ進めます。

WriteByte(Byte)

ストリーム内の現在位置にバイトを書き込み、ストリーム内の位置を 1 バイト進めます。

(継承元 Stream)

拡張メソッド

CopyToAsync(Stream, PipeWriter, CancellationToken)

キャンセル トークンを使用して、Stream からバイトを非同期に読み取り、指定した PipeWriterに書き込みます。

AsInputStream(Stream)

.NET for Windows ストア アプリのマネージド ストリームを Windows ランタイムの入力ストリームに変換します。

AsOutputStream(Stream)

.NET for Windows ストア アプリのマネージド ストリームを Windows ランタイムの出力ストリームに変換します。

AsRandomAccessStream(Stream)

指定したストリームをランダム アクセス ストリームに変換します。

ConfigureAwait(IAsyncDisposable, Boolean)

非同期破棄から返されるタスクの待機を実行する方法を構成します。

適用対象

こちらもご覧ください

  • DeflateStream、GZipStream、CryptoStream での部分読み取りと 0 バイト読み取りの