DeflateStream Klas

Definitie

Biedt methoden en eigenschappen voor het comprimeren en decomprimeren van streams met behulp van het algoritme Deflate.

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

Voorbeelden

In het volgende voorbeeld ziet u hoe u de DeflateStream klasse gebruikt om een bestand te comprimeren en decomprimeren.

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

Opmerkingen

Deze klasse vertegenwoordigt het deflate-algoritme, een industriestandaard algoritme voor verliesloze bestandscompressie en decompressie. Vanaf .NET Framework 4.5 maakt de klasse DeflateStream gebruik van de zlib-bibliotheek. Als gevolg hiervan biedt het een beter compressie-algoritme en, in de meeste gevallen, een kleiner gecomprimeerd bestand dan in eerdere versies van .NET Framework.

Deze klasse biedt geen inherente functionaliteit voor het toevoegen van bestanden aan of het extraheren van bestanden uit zip-archieven. Als u wilt werken met zip-archieven, gebruikt u de ZipArchive en de ZipArchiveEntry klassen.

De DeflateStream klasse gebruikt hetzelfde compressie-algoritme als de gzip-gegevensindeling die door de GZipStream klasse wordt gebruikt.

De compressiefunctionaliteit in DeflateStream en GZipStream wordt weergegeven als een stroom. Gegevens worden op byte-bytebasis gelezen, dus het is niet mogelijk om meerdere passen uit te voeren om de beste methode te bepalen voor het comprimeren van volledige bestanden of grote gegevensblokken. De DeflateStream en GZipStream klassen worden het beste gebruikt voor niet-gecomprimeerde gegevensbronnen. Als de brongegevens al zijn gecomprimeerd, kan het gebruik van deze klassen de grootte van de stroom vergroten.

De exacte gecomprimeerde bytereeks die wordt geretourneerd door DeflateStream kan variëren tussen .NET releases, platforms en onderliggende compressie-engines. Wijzigingen in zlib-versies, algoritmeaanpassingen en prestatieoptimalisaties kunnen verschillende uitvoer produceren voor dezelfde invoergegevens. Maar alle gegevens die worden gecomprimeerd door DeflateStream , kunnen altijd zonder verlies worden gedecomprimeerd naar de oorspronkelijke vorm.

Constructors

Name Description
DeflateStream(Stream, CompressionLevel, Boolean)

Initialiseert een nieuw exemplaar van de DeflateStream klasse met behulp van het opgegeven stroom- en compressieniveau en laat de stream eventueel open.

DeflateStream(Stream, CompressionLevel)

Initialiseert een nieuw exemplaar van de DeflateStream klasse met behulp van het opgegeven stroom- en compressieniveau.

DeflateStream(Stream, CompressionMode, Boolean)

Initialiseert een nieuw exemplaar van de DeflateStream klasse met behulp van de opgegeven stroom- en compressiemodus en laat eventueel de stream open.

DeflateStream(Stream, CompressionMode)

Initialiseert een nieuw exemplaar van de DeflateStream klasse met behulp van de opgegeven stroom- en compressiemodus.

Eigenschappen

Name Description
BaseStream

Hiermee wordt een verwijzing naar de onderliggende stroom opgehaald.

CanRead

Hiermee wordt een waarde opgehaald die aangeeft of de stream het lezen ondersteunt tijdens het decomprimeren van een bestand.

CanSeek

Hiermee wordt een waarde opgehaald die aangeeft of de stream het zoeken ondersteunt.

CanTimeout

Hiermee wordt een waarde opgehaald die bepaalt of er een time-out optreedt voor de huidige stroom.

(Overgenomen van Stream)
CanWrite

Hiermee wordt een waarde opgehaald die aangeeft of de stream schrijfkracht ondersteunt.

Length

Deze eigenschap wordt niet ondersteund en genereert altijd een NotSupportedException.

Position

Deze eigenschap wordt niet ondersteund en genereert altijd een NotSupportedException.

ReadTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stroom probeert te lezen voordat er een time-out optreedt.

(Overgenomen van Stream)
WriteTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stream probeert te schrijven voordat er een time-out optreedt.

(Overgenomen van Stream)

Methoden

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

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan de ReadAsync(Byte[], Int32, Int32) methode te gebruiken.)

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

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan de WriteAsync(Byte[], Int32, Int32) methode te gebruiken.)

Close()

Hiermee sluit u de huidige stroom en worden alle resources (zoals sockets en bestandsingangen) die aan de huidige stroom zijn gekoppeld, vrijgegeven. In plaats van deze methode aan te roepen, moet u ervoor zorgen dat de stream correct wordt verwijderd.

(Overgenomen van Stream)
CopyTo(Stream, Int32)

Leest de bytes uit de huidige stroom deflate en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte.

CopyTo(Stream, Int32)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyTo(Stream)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stream met behulp van een opgegeven annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchroon leest de bytes uit de huidige stroom deflate en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte.

CopyToAsync(Stream, Int32, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte en annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream)

Asynchroon leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CreateObjRef(Type)

Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object.

(Overgenomen van MarshalByRefObject)
CreateWaitHandle()
Verouderd.

Wijst een WaitHandle object toe.

(Overgenomen van Stream)
Dispose()

Alle resources die worden gebruikt door de Stream.

(Overgenomen van Stream)
Dispose(Boolean)

Publiceert de niet-beheerde resources die worden gebruikt door de DeflateStream beheerde resources en brengt eventueel de beheerde resources vrij.

DisposeAsync()

Geeft asynchroon de onbeheerde resources vrij die worden gebruikt door de DeflateStream.

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan de ReadAsync(Byte[], Int32, Int32) methode te gebruiken.)

EndWrite(IAsyncResult)

Hiermee wordt een asynchrone schrijfbewerking beëindigd. (Overweeg in plaats daarvan de WriteAsync(Byte[], Int32, Int32) methode te gebruiken.)

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Flush()

De huidige implementatie van deze methode heeft geen functionaliteit.

FlushAsync()

Asynchroon wist alle buffers voor deze stroom en zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

(Overgenomen van Stream)
FlushAsync(CancellationToken)

Asynchroon wist alle buffers voor deze stroom deflate, zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven en annuleringsaanvragen worden bewaakt.

FlushAsync(CancellationToken)

Asynchroon wist alle buffers voor deze stroom, zorgt ervoor dat gebufferde gegevens naar het onderliggende apparaat worden geschreven en annuleringsaanvragen worden gecontroleerd.

(Overgenomen van Stream)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLifetimeService()

Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd.

(Overgenomen van MarshalByRefObject)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
InitializeLifetimeService()

Hiermee haalt u een levensduurserviceobject op om het levensduurbeleid voor dit exemplaar te beheren.

(Overgenomen van MarshalByRefObject)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
MemberwiseClone(Boolean)

Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object.

(Overgenomen van MarshalByRefObject)
ObjectInvariant()
Verouderd.

Biedt ondersteuning voor een Contract.

(Overgenomen van Stream)
Read(Byte[], Int32, Int32)

Leest een aantal gedecomprimeerde bytes in de opgegeven bytematrix.

Read(Span<Byte>)

Hiermee wordt een reeks bytes van de huidige deflate stroom in een bytespanne gelezen en wordt de positie binnen de stroom Deflate naar het aantal gelezen bytes verplaatst.

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

Asynchroon leest een reeks bytes uit de huidige stroom deflate, schrijft deze naar een bytematrix, verplaatst de positie binnen de stroom Deflate door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

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

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
ReadAsync(Byte[], Int32, Int32)

Asynchroon leest een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

(Overgenomen van Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige stroom deflate, schrijft deze naar een bytegeheugenbereik, verplaatst de positie binnen de stroom Deflate door het aantal bytes lezen en bewaakt annuleringsaanvragen.

ReadByte()

Hiermee leest u een byte uit de stroom deflate en wordt de positie binnen de stroom met één byte vooruit gelezen of wordt -1 geretourneerd als aan het einde van de stroom deflate.

ReadByte()

Hiermee leest u een byte uit de stroom en wordt de positie binnen de stream met één byte vooruit gelezen of wordt -1 geretourneerd als aan het einde van de stream.

(Overgenomen van Stream)
Seek(Int64, SeekOrigin)

Deze bewerking wordt niet ondersteund en genereert altijd een NotSupportedException.

SetLength(Int64)

Deze bewerking wordt niet ondersteund en genereert altijd een NotSupportedException.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
Write(Byte[], Int32, Int32)

Hiermee schrijft u gecomprimeerde bytes naar de onderliggende stroom van de opgegeven bytematrix.

Write(ReadOnlySpan<Byte>)

Hiermee schrijft u een reeks bytes naar de huidige stroom deflate en wordt de huidige positie binnen deze stroom gedeflate door het aantal geschreven bytes verplaatst.

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

Asynchroon schrijft gecomprimeerde bytes naar de onderliggende stroom deflate vanuit de opgegeven bytematrix.

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

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
WriteAsync(Byte[], Int32, Int32)

Asynchroon schrijft een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst door het aantal geschreven bytes.

(Overgenomen van Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchroon schrijft gecomprimeerde bytes naar de onderliggende stroom deflate vanuit de opgegeven alleen-lezen geheugenregio.

WriteByte(Byte)

Hiermee schrijft u een byte naar de huidige positie in de stroom en wordt de positie binnen de stream met één byte vooruit.

(Overgenomen van Stream)

Extensiemethoden

Name Description
AsInputStream(Stream)

Converteert een beheerde stream in de .NET voor Windows Store-apps naar een invoerstroom in de Windows Runtime.

AsOutputStream(Stream)

Converteert een beheerde stream in de .NET voor Windows Store-apps naar een uitvoerstroom in de Windows Runtime.

AsRandomAccessStream(Stream)

Converteert de opgegeven stream naar een stream voor willekeurige toegang.

ConfigureAwait(IAsyncDisposable, Boolean)

Hiermee configureert u hoe wacht op de taken die worden geretourneerd op basis van een asynchroon wegwerp, worden uitgevoerd.

Van toepassing op

Zie ook