A class for compressing and decompressing streams using the Deflate algorithm.
The DeflateStream is a Decorator
on a System.IO.Stream. It adds DEFLATE compression or decompression to any stream.
Using this stream, applications can compress or decompress data via stream Read
and Write
operations. Either compresssion or decompression can occur through either reading or writing. The compression format used is DEFLATE, which is documented in IETF RFC 1951
, "DEFLATE
Compressed Data Format Specification version 1.3.".
This class is similar to ZlibStream, except that ZlibStream
adds the RFC 1950 - ZLIB
framing bytes to a compressed stream when compressing, or expects the RFC1950 framing bytes when decompressing. The DeflateStream
does not.
- See Also
- ZlibStream, GZipStream
|
| DeflateStream (System.IO.Stream stream, CompressionMode mode) |
| Create a DeflateStream using the specified CompressionMode. More...
|
|
| DeflateStream (System.IO.Stream stream, CompressionMode mode, CompressionLevel level) |
| Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. More...
|
|
| DeflateStream (System.IO.Stream stream, CompressionMode mode, bool leaveOpen) |
| Create a DeflateStream using the specified CompressionMode , and explicitly specify whether the stream should be left open after Deflation or Inflation. More...
|
|
| DeflateStream (System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) |
| Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel , and explicitly specify whether the stream should be left open after Deflation or Inflation. More...
|
|
void | SetDataToRead (int size) |
|
void | ChangeStream (System.IO.Stream stream) |
|
void | DoneRead () |
|
override void | Flush () |
| Flush the stream. More...
|
|
override int | Read (byte[] buffer, int offset, int count) |
| Read data from the stream. More...
|
|
override long | Seek (long offset, System.IO.SeekOrigin origin) |
| Calling this method always throws a NotImplementedException. More...
|
|
override void | SetLength (long value) |
| Calling this method always throws a NotImplementedException. More...
|
|
override void | Write (byte[] buffer, int offset, int count) |
| Write data to the stream. More...
|
|
Zlib.DeflateStream.DeflateStream |
( |
System.IO.Stream |
stream, |
|
|
CompressionMode |
mode, |
|
|
bool |
leaveOpen |
|
) |
| |
|
inline |
Create a DeflateStream
using the specified CompressionMode
, and explicitly specify whether the stream should be left open after Deflation or Inflation.
This constructor allows the application to request that the captive stream remain open after the deflation or inflation occurs. By default, after Close()
is called on the stream, the captive stream is also closed. In some cases this is not desired, for example if the stream is a memory stream that will be re-read after compression. Specify true for the leaveOpen parameter to leave the stream open.
The DeflateStream
will use the default compression level.
See the other overloads of this constructor for example code.
- Parameters
-
stream | The stream which will be read or written. This is called the "captive" stream in other places in this documentation. |
- Parameters
-
mode | Indicates whether the DeflateStream will compress or decompress. |
- Parameters
-
leaveOpen | true if the application would like the stream to remain open after inflation/deflation. |
Create a DeflateStream
using the specified CompressionMode
and the specified CompressionLevel
, and explicitly specify whether the stream should be left open after Deflation or Inflation.
When mode is CompressionMode.Decompress
, the level parameter is ignored.
This constructor allows the application to request that the captive stream remain open after the deflation or inflation occurs. By default, after Close()
is called on the stream, the captive stream is also closed. In some cases this is not desired, for example if the stream is a System.IO.MemoryStream that will be re-read after compression. Specify true for the leaveOpen parameter to leave the stream open.
This example shows how to use a DeflateStream
to compress data from a file, and store the compressed data into another file.
using (var output =
System.IO.File.Create(fileToCompress +
".deflated"))
{
using (
System.IO.Stream input =
System.IO.File.OpenRead(fileToCompress))
{
{
byte[] buffer = new byte[WORKING_BUFFER_SIZE];
int n= -1;
while (n != 0)
{
if (n > 0)
compressor.Write(buffer, 0, n);
n= input.Read(buffer, 0, buffer.Length);
}
}
}
}
Using output As FileStream = File.Create(fileToCompress & ".deflated")
Using input As Stream = File.OpenRead(fileToCompress)
Dim buffer As Byte() = New Byte(4096) {}
Dim n As Integer = -1
Do While (n <> 0)
If (n > 0) Then
compressor.Write(buffer, 0, n)
n = input.Read(buffer, 0, buffer.Length)
Loop
' can write additional data to the output stream here.
End Using
- Parameters
-
stream | The stream which will be read or written. |
mode | Indicates whether the DeflateStream will compress or decompress. |
leaveOpen | true if the application would like the stream to remain open after inflation/deflation. |
level | A tuning knob to trade speed for effectiveness. |
override void Zlib.DeflateStream.Dispose |
( |
bool |
disposing) | |
|
|
inlineprotected |
Dispose the stream.
This may or may not result in a Close()
call on the captive stream. See the constructors that have a leaveOpen
parameter for more information.
Application code won't call this code directly. This method may be invoked in two distinct scenarios. If disposing == true, the method has been called directly or indirectly by a user's code, for example via the public Dispose() method. In this case, both managed and unmanaged resources can be referenced and disposed. If disposing == false, the method has been called by the runtime from inside the object finalizer and this method should not reference other objects; in that case only unmanaged resources must be referenced or disposed.
- Parameters
-
disposing | true if the Dispose method was invoked by user code. |
override int Zlib.DeflateStream.Read |
( |
byte[] |
buffer, |
|
|
int |
offset, |
|
|
int |
count |
|
) |
| |
|
inline |
Read data from the stream.
If you wish to use the DeflateStream
to compress data while reading, you can create a DeflateStream
with CompressionMode.Compress
, providing an uncompressed data stream. Then call Read() on that DeflateStream
, and the data read will be compressed as you read. If you wish to use the DeflateStream
to decompress data while reading, you can create a DeflateStream
with CompressionMode.Decompress
, providing a readable compressed data stream. Then call Read() on that DeflateStream
, and the data read will be decompressed as you read.
A DeflateStream
can be used for Read()
or Write()
, but not both.
- Parameters
-
buffer | The buffer into which the read data should be placed. |
offset | the offset within that data array to put the first byte read. |
count | the number of bytes to read. |
- Returns
- the number of bytes actually read
override void Zlib.DeflateStream.Write |
( |
byte[] |
buffer, |
|
|
int |
offset, |
|
|
int |
count |
|
) |
| |
|
inline |
Write data to the stream.
If you wish to use the DeflateStream
to compress data while writing, you can create a DeflateStream
with CompressionMode.Compress
, and a writable output stream. Then call Write()
on that DeflateStream
, providing uncompressed data as input. The data sent to the output stream will be the compressed form of the data written. If you wish to use the DeflateStream
to decompress data while writing, you can create a DeflateStream
with CompressionMode.Decompress
, and a writable output stream. Then call Write()
on that stream, providing previously compressed data. The data sent to the output stream will be the decompressed form of the data written.
A DeflateStream
can be used for Read()
or Write()
, but not both.
- Parameters
-
buffer | The buffer holding data to write to the stream. |
offset | the offset within that data array to find the first byte to write. |
count | the number of bytes to write. |