DeflateStream Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Innehåller metoder och egenskaper för att komprimera och dekomprimera strömmar med hjälp av Deflate-algoritmen.
public ref class DeflateStream : System::IO::Stream
public class DeflateStream : System.IO.Stream
type DeflateStream = class
inherit Stream
Public Class DeflateStream
Inherits Stream
- Arv
- Arv
Exempel
I följande exempel visas hur du använder DeflateStream klassen för att komprimera och dekomprimera en fil.
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
Kommentarer
Den här klassen representerar Deflate-algoritmen, som är en branschstandardalgoritm för förlustfri filkomprimering och dekomprimering. Från och med .NET Framework 4.5 använder klassen DeflateStream zlib-biblioteket. Det ger därför en bättre komprimeringsalgoritm och i de flesta fall en mindre komprimerad fil än i tidigare versioner av .NET Framework.
Den här klassen tillhandahåller inte funktioner för att lägga till filer i eller extrahera filer från zip-arkiv. Om du vill arbeta med zip-arkiv använder du klasserna ZipArchiveZipArchiveEntry och .
Klassen DeflateStream använder samma komprimeringsalgoritm som det gzip-dataformat som används av GZipStream klassen.
Komprimeringsfunktionen i DeflateStream och GZipStream exponeras som en ström. Data läss på byte-för-byte-basis, så det går inte att utföra flera pass för att fastställa den bästa metoden för att komprimera hela filer eller stora datablock. Klasserna DeflateStream och GZipStream används bäst på okomprimerade datakällor. Om källdata redan har komprimerats kan användningen av dessa klasser faktiskt öka dataströmmens storlek.
Den exakta komprimerade bytesekvensen som returneras av DeflateStream kan variera mellan .NET versioner, plattformar och underliggande komprimeringsmotorer. Ändringar i zlib-versioner, algoritmjusteringar och prestandaoptimeringar kan ge olika utdata för samma indata. Men alla data som komprimeras av DeflateStream kan alltid dekomprimeras till sin ursprungliga form utan förlust.
Konstruktorer
| Name | Description |
|---|---|
| DeflateStream(Stream, CompressionLevel, Boolean) |
Initierar en ny instans av DeflateStream klassen med hjälp av den angivna ström- och komprimeringsnivån, och om du vill kan du lämna strömmen öppen. |
| DeflateStream(Stream, CompressionLevel) |
Initierar en ny instans av DeflateStream klassen med hjälp av den angivna ström- och komprimeringsnivån. |
| DeflateStream(Stream, CompressionMode, Boolean) |
Initierar en ny instans av DeflateStream klassen med hjälp av angivet ström- och komprimeringsläge, och du kan också lämna strömmen öppen. |
| DeflateStream(Stream, CompressionMode) |
Initierar en ny instans av DeflateStream klassen med hjälp av det angivna ström- och komprimeringsläget. |
Egenskaper
| Name | Description |
|---|---|
| BaseStream |
Hämtar en referens till den underliggande strömmen. |
| CanRead |
Hämtar ett värde som anger om strömmen stöder läsning vid dekomprimering av en fil. |
| CanSeek |
Hämtar ett värde som anger om strömmen stöder sökning. |
| CanTimeout |
Hämtar ett värde som avgör om den aktuella strömmen kan överskrida tidsgränsen. (Ärvd från Stream) |
| CanWrite |
Hämtar ett värde som anger om strömmen stöder skrivning. |
| Length |
Den här egenskapen stöds inte och genererar alltid en NotSupportedException. |
| Position |
Den här egenskapen stöds inte och genererar alltid en NotSupportedException. |
| ReadTimeout |
Hämtar eller anger ett värde i millisekunder som avgör hur länge strömmen ska försöka läsa innan tidsgränsen nås. (Ärvd från Stream) |
| WriteTimeout |
Hämtar eller anger ett värde i millisekunder som avgör hur länge strömmen ska försöka skriva innan tidsgränsen nås. (Ärvd från Stream) |
Metoder
| Name | Description |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Påbörjar en asynkron läsåtgärd. (Överväg att ReadAsync(Byte[], Int32, Int32) använda metoden i stället.) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Påbörjar en asynkron skrivåtgärd. (Överväg att WriteAsync(Byte[], Int32, Int32) använda metoden i stället.) |
| Close() |
Stänger den aktuella strömmen och släpper alla resurser (till exempel socketar och filhandtag) som är associerade med den aktuella strömmen. I stället för att anropa den här metoden kontrollerar du att dataströmmen tas bort korrekt. (Ärvd från Stream) |
| CopyTo(Stream, Int32) |
Läser byteen från den aktuella Deflate-strömmen och skriver dem till en annan ström med en angiven buffertstorlek. |
| CopyTo(Stream, Int32) |
Läser byteen från den aktuella strömmen och skriver dem till en annan ström med en angiven buffertstorlek. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CopyTo(Stream) |
Läser byteen från den aktuella strömmen och skriver dem till en annan ström. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CopyToAsync(Stream, CancellationToken) |
Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström med hjälp av en angiven annulleringstoken. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Läser asynkront byte från den aktuella Deflate-strömmen och skriver dem till en annan ström med en angiven buffertstorlek. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Läser asynkront byte från den aktuella strömmen och skriver dem till en annan dataström med en angiven buffertstorlek och annulleringstoken. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CopyToAsync(Stream, Int32) |
Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström med en angiven buffertstorlek. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CopyToAsync(Stream) |
Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström. Båda strömmarnas positioner avanceras av antalet kopierade byte. (Ärvd från Stream) |
| CreateObjRef(Type) |
Skapar ett objekt som innehåller all relevant information som krävs för att generera en proxy som används för att kommunicera med ett fjärrobjekt. (Ärvd från MarshalByRefObject) |
| CreateWaitHandle() |
Föråldrad.
Allokerar ett WaitHandle objekt. (Ärvd från Stream) |
| Dispose() |
Släpper alla resurser som används av Stream. (Ärvd från Stream) |
| Dispose(Boolean) |
Släpper de ohanterade resurser som används av DeflateStream och släpper eventuellt de hanterade resurserna. |
| DisposeAsync() |
Asynkront släpper de ohanterade resurser som används av DeflateStream. |
| EndRead(IAsyncResult) |
Väntar på att den väntande asynkrona läsningen ska slutföras. (Överväg att ReadAsync(Byte[], Int32, Int32) använda metoden i stället.) |
| EndWrite(IAsyncResult) |
Avslutar en asynkron skrivåtgärd. (Överväg att WriteAsync(Byte[], Int32, Int32) använda metoden i stället.) |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Flush() |
Den aktuella implementeringen av den här metoden har inga funktioner. |
| FlushAsync() |
Rensar asynkront alla buffertar för den här strömmen och gör att buffrade data skrivs till den underliggande enheten. (Ärvd från Stream) |
| FlushAsync(CancellationToken) |
Rensar asynkront alla buffertar för den här Deflate-strömmen, gör att buffrade data skrivs till den underliggande enheten och övervakar begäranden om annullering. |
| FlushAsync(CancellationToken) |
Rensar asynkront alla buffertar för den här strömmen, gör att buffrade data skrivs till den underliggande enheten och övervakar begäranden om annullering. (Ärvd från Stream) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetLifetimeService() |
Hämtar det aktuella livslängdstjänstobjektet som styr livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InitializeLifetimeService() |
Hämtar ett tjänstobjekt för livslängd för att styra livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| MemberwiseClone(Boolean) |
Skapar en ytlig kopia av det aktuella MarshalByRefObject objektet. (Ärvd från MarshalByRefObject) |
| ObjectInvariant() |
Föråldrad.
Tillhandahåller stöd för en Contract. (Ärvd från Stream) |
| Read(Byte[], Int32, Int32) |
Läser ett antal dekomprimerade byte i den angivna bytematrisen. |
| Read(Span<Byte>) |
Läser en sekvens med byte från den aktuella Deflate-strömmen till ett byteintervall och avancerar positionen inom Deflate-strömmen med antalet lästa byte. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Läser asynkront en sekvens med byte från den aktuella Deflate-strömmen, skriver dem till en bytematris, avancerar positionen i Deflate-strömmen med antalet lästa byte och övervakar begäranden om annullering. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Läser asynkront en sekvens med byte från den aktuella strömmen, avancerar positionen i strömmen med antalet lästa byte och övervakar begäranden om annullering. (Ärvd från Stream) |
| ReadAsync(Byte[], Int32, Int32) |
Läser asynkront en sekvens med byte från den aktuella strömmen och avancerar positionen i strömmen med antalet lästa byte. (Ärvd från Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Läser asynkront en sekvens med byte från den aktuella Deflate-strömmen, skriver dem till ett byteminnesintervall, avancerar positionen i Deflate-strömmen med antalet lästa byte och övervakar begäranden om annullering. |
| ReadByte() |
Läser en byte från Deflate-strömmen och flyttar positionen i strömmen med en byte, eller returnerar -1 om i slutet av Deflate-strömmen. |
| ReadByte() |
Läser en byte från strömmen och flyttar positionen i strömmen med en byte, eller returnerar -1 om i slutet av strömmen. (Ärvd från Stream) |
| Seek(Int64, SeekOrigin) |
Den här åtgärden stöds inte och genererar alltid en NotSupportedException. |
| SetLength(Int64) |
Den här åtgärden stöds inte och genererar alltid en NotSupportedException. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
| Write(Byte[], Int32, Int32) |
Skriver komprimerade byte till den underliggande strömmen från den angivna bytematrisen. |
| Write(ReadOnlySpan<Byte>) |
Skriver en sekvens med byte till den aktuella Deflate-strömmen och avancerar den aktuella positionen i den här Deflate-strömmen med antalet skrivna byte. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Skriver asynkront komprimerade byte till den underliggande Deflate-strömmen från den angivna bytematrisen. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Skriver asynkront en sekvens med byte till den aktuella strömmen, avancerar den aktuella positionen i den här strömmen med antalet skrivna byte och övervakar begäranden om annullering. (Ärvd från Stream) |
| WriteAsync(Byte[], Int32, Int32) |
Skriver asynkront en sekvens med byte till den aktuella strömmen och avancerar den aktuella positionen i den här strömmen med antalet skrivna byte. (Ärvd från Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Skriver asynkront komprimerade byte till den underliggande Deflate-strömmen från den angivna skrivskyddade minnesregionen. |
| WriteByte(Byte) |
Skriver en byte till den aktuella positionen i strömmen och flyttar positionen inom strömmen med en byte. (Ärvd från Stream) |
Tilläggsmetoder
| Name | Description |
|---|---|
| AsInputStream(Stream) |
Konverterar en hanterad ström i .NET för Windows Store-appar till en indataström i Windows Runtime. |
| AsOutputStream(Stream) |
Konverterar en hanterad ström i .NET för Windows Store-appar till en utdataström i Windows Runtime. |
| AsRandomAccessStream(Stream) |
Konverterar den angivna strömmen till en slumpmässig åtkomstström. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfigurerar hur väntar på de uppgifter som returneras från en asynkron disponibel ska utföras. |