Sdílet prostřednictvím


DeflateStream Třída

Definice

Poskytuje metody a vlastnosti pro komprimaci a dekompresi datových proudů pomocí algoritmu Deflate.

public ref class DeflateStream : System::IO::Stream
public class DeflateStream : System.IO.Stream
type DeflateStream = class
    inherit Stream
Public Class DeflateStream
Inherits Stream
Dědičnost
DeflateStream
Dědičnost

Příklady

Následující příklad ukazuje, jak pomocí třídy DeflateStream komprimovat a dekomprimovat soubor.

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

Poznámky

Tato třída představuje Deflate algoritmus, což je standardní algoritmus pro bezeztrátovou kompresi a dekompresi souborů. Počínaje rozhraním .NET Framework 4.5 používá třída DeflateStream knihovnu zlib. V důsledku toho poskytuje lepší algoritmus komprese a ve většině případů menší komprimovaný soubor, než poskytuje v dřívějších verzích rozhraní .NET Framework.

Tato třída ze své podstaty neposkytuje funkce pro přidávání nebo extrahování souborů z archivů zip. Pokud chcete pracovat s archivy zip, použijte ZipArchive a třídy ZipArchiveEntry.

Třída DeflateStream používá stejný algoritmus komprese jako formát dat gzip používaný GZipStream třídou.

Funkce komprese v DeflateStream a GZipStream se zveřejňují jako datový proud. Data se čtou na bajtové bajtové bázi, takže není možné provést více průchodů a určit nejlepší metodu pro komprimaci celých souborů nebo velkých bloků dat. Třídy DeflateStream a GZipStream jsou nejvhodnější pro nekomprimované zdroje dat. Pokud jsou zdrojová data již komprimována, může použití těchto tříd skutečně zvětšit velikost datového proudu.

Konstruktory

DeflateStream(Stream, CompressionLevel)

Inicializuje novou instanci třídy DeflateStream pomocí zadané úrovně datového proudu a komprese.

DeflateStream(Stream, CompressionLevel, Boolean)

Inicializuje novou instanci třídy DeflateStream pomocí zadané úrovně datového proudu a komprese a volitelně ponechá stream otevřený.

DeflateStream(Stream, CompressionMode)

Inicializuje novou instanci třídy DeflateStream pomocí zadaného streamu a režimu komprese.

DeflateStream(Stream, CompressionMode, Boolean)

Inicializuje novou instanci DeflateStream třídy pomocí zadaného streamu a režimu komprese a volitelně ponechá stream otevřený.

DeflateStream(Stream, ZLibCompressionOptions, Boolean)

Poskytuje metody a vlastnosti pro komprimaci a dekompresi datových proudů pomocí algoritmu Deflate.

Vlastnosti

BaseStream

Získá odkaz na podkladový datový proud.

CanRead

Získá hodnotu určující, zda datový proud podporuje čtení při dekompresi souboru.

CanSeek

Získá hodnotu určující, zda datový proud podporuje hledání.

CanTimeout

Získá hodnotu, která určuje, zda aktuální datový proud může vypršení časového limitu.

(Zděděno od Stream)
CanWrite

Získá hodnotu určující, zda datový proud podporuje zápis.

Length

Tato vlastnost není podporována a vždy vyvolá NotSupportedException.

Position

Tato vlastnost není podporována a vždy vyvolá NotSupportedException.

ReadTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí přečíst před uplynutím časového limitu.

(Zděděno od Stream)
WriteTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí zapsat před uplynutím časového limitu.

(Zděděno od Stream)

Metody

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci čtení. (Místo toho zvažte použití metody ReadAsync(Byte[], Int32, Int32).)

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32).)

(Zděděno od Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci zápisu. (Místo toho zvažte použití metody WriteAsync(Byte[], Int32, Int32).)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32).)

(Zděděno od Stream)
Close()

Zavře aktuální datový proud a uvolní všechny prostředky (například sokety a popisovače souborů) přidružené k aktuálnímu datovému proudu. Místo volání této metody se ujistěte, že je datový proud správně uvolněn.

(Zděděno od Stream)
CopyTo(Stream)

Přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyTo(Stream, Int32)

Přečte bajty z aktuálního datového proudu Deflate a zapíše je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti.

CopyTo(Stream, Int32)

Načte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadaného tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, Int32)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu Deflate a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti.

CopyToAsync(Stream, Int32, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti a tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
CreateWaitHandle()
Zastaralé.
Zastaralé.
Zastaralé.

Přidělí objekt WaitHandle.

(Zděděno od Stream)
Dispose()

Uvolní všechny prostředky používané Stream.

(Zděděno od Stream)
Dispose(Boolean)

Uvolní nespravované prostředky používané DeflateStream a volitelně uvolní spravované prostředky.

DisposeAsync()

Asynchronně uvolní nespravované prostředky používané DeflateStream.

DisposeAsync()

Asynchronně uvolní nespravované prostředky používané Stream.

(Zděděno od Stream)
EndRead(IAsyncResult)

Čeká na dokončení čekajícího asynchronního čtení. (Místo toho zvažte použití metody ReadAsync(Byte[], Int32, Int32).)

EndRead(IAsyncResult)

Čeká na dokončení čekajícího asynchronního čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32).)

(Zděděno od Stream)
EndWrite(IAsyncResult)

Ukončí asynchronní operaci zápisu. (Místo toho zvažte použití metody WriteAsync(Byte[], Int32, Int32).)

EndWrite(IAsyncResult)

Ukončí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32).)

(Zděděno od Stream)
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Flush()

Aktuální implementace této metody nemá žádné funkce.

FlushAsync()

Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud a způsobí zápis všech dat uložených do vyrovnávací paměti do podkladového zařízení.

(Zděděno od Stream)
FlushAsync(CancellationToken)

Asynchronně vymaže všechny vyrovnávací paměti pro tento deflate stream, způsobí zápis všech dat uložených do vyrovnávací paměti do podkladového zařízení a monitoruje žádosti o zrušení.

FlushAsync(CancellationToken)

Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud, způsobí zápis všech dat uložených do vyrovnávací paměti do podkladového zařízení a monitoruje žádosti o zrušení.

(Zděděno od Stream)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
InitializeLifetimeService()
Zastaralé.

Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního objektu MarshalByRefObject.

(Zděděno od MarshalByRefObject)
ObjectInvariant()
Zastaralé.

Poskytuje podporu pro Contract.

(Zděděno od Stream)
Read(Byte[], Int32, Int32)

Načte řadu dekomprimovaných bajtů do zadaného bajtového pole.

Read(Span<Byte>)

Přečte posloupnost bajtů z aktuálního datového proudu Deflate do bajtového rozsahu a posune pozici v rámci datového proudu Deflate o počet přečtených bajtů.

Read(Span<Byte>)

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od Stream)
ReadAsync(Byte[], Int32, Int32)

Asynchronně čte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu Deflate, zapíše je do pole bajtů, posune pozici v rámci datového proudu Deflate o počet přečtených bajtů a monitoruje žádosti o zrušení.

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

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu, posune pozici v datovém proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu Deflate, zapíše je do rozsahu bajtů paměti, posune pozici v rámci deflate streamu o počet přečtených bajtů a monitoruje žádosti o zrušení.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu, posune pozici v datovém proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Čte alespoň minimální počet bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Asynchronně čte alespoň minimální počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
ReadByte()

Přečte bajt z deflate datového proudu a posune pozici v datovém proudu o jeden bajt nebo vrátí -1, pokud je na konci deflate datového proudu.

ReadByte()

Přečte bajt ze streamu a posune pozici v rámci datového proudu o jeden bajt nebo vrátí -1, pokud je na konci datového proudu.

(Zděděno od Stream)
ReadExactly(Byte[], Int32, Int32)

Přečte count počet bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu.

(Zděděno od Stream)
ReadExactly(Span<Byte>)

Přečte bajty z aktuálního datového proudu a posune pozici v rámci datového proudu, dokud se buffer nenaplní.

(Zděděno od Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně čte count počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu a monitoruje požadavky na zrušení.

(Zděděno od Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu, posune pozici v rámci datového proudu, dokud se buffer nenaplní, a monitoruje žádosti o zrušení.

(Zděděno od Stream)
Seek(Int64, SeekOrigin)

Tato operace není podporována a vždy vyvolá NotSupportedException.

SetLength(Int64)

Tato operace není podporována a vždy vyvolá NotSupportedException.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
Write(Byte[], Int32, Int32)

Zapíše komprimované bajty do podkladového datového proudu ze zadaného pole bajtů.

Write(ReadOnlySpan<Byte>)

Zapíše posloupnost bajtů do aktuálního datového proudu Deflate a posune aktuální pozici v rámci tohoto deflate datového proudu o počet zapsaných bajtů.

Write(ReadOnlySpan<Byte>)

Při přepsání v odvozené třídě zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v tomto datovém proudu počtem zapsaných bajtů.

(Zděděno od Stream)
WriteAsync(Byte[], Int32, Int32)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů.

(Zděděno od Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně zapisuje komprimované bajty do podkladového datového proudu Deflate ze zadaného bajtového pole.

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

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronně zapisuje komprimované bajty do podkladového datového proudu Deflate ze zadané oblasti paměti jen pro čtení.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
WriteByte(Byte)

Zapíše bajt do aktuálního datového proudu Deflate a posune aktuální pozici v rámci tohoto deflate streamu o jeden.

WriteByte(Byte)

Zapíše bajt na aktuální pozici v datovém proudu a posune pozici v rámci datového proudu o jeden bajt.

(Zděděno od Stream)

Metody rozšíření

CopyToAsync(Stream, PipeWriter, CancellationToken)

Asynchronně čte bajty z Stream a zapisuje je do zadané PipeWriterpomocí tokenu zrušení.

AsInputStream(Stream)

Převede spravovaný datový proud v .NET pro aplikace pro Windows Store na vstupní datový proud v prostředí Windows Runtime.

AsOutputStream(Stream)

Převede spravovaný datový proud v .NET pro aplikace pro Windows Store na výstupní datový proud v prostředí Windows Runtime.

AsRandomAccessStream(Stream)

Převede zadaný datový proud na datový proud s náhodným přístupem.

ConfigureAwait(IAsyncDisposable, Boolean)

Konfiguruje, jak čekají na úlohy vrácené z asynchronního jednorázového použití.

Platí pro

Viz také