This topic has not yet been rated - Rate this topic

GZipStream Class

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

Provides methods and properties used to compress and decompress streams.

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.Compression.GZipStream

Namespace:  System.IO.Compression
Assembly:  System (in System.dll)
public class GZipStream : Stream

The GZipStream type exposes the following members.

  Name Description
Public method GZipStream(Stream, CompressionLevel) Initializes a new instance of the GZipStream class by using the specified stream and compression level.
Public method Supported by the XNA Framework GZipStream(Stream, CompressionMode) Initializes a new instance of the GZipStream class by using the specified stream and compression mode.
Public method GZipStream(Stream, CompressionLevel, Boolean) Initializes a new instance of the GZipStream class by using the specified stream and compression level, and optionally leaves the stream open.
Public method Supported by the XNA Framework GZipStream(Stream, CompressionMode, Boolean) Initializes a new instance of the GZipStream class by using the specified stream and compression mode, and optionally leaves the stream open.
Top
  Name Description
Public property Supported by the XNA Framework BaseStream Gets a reference to the underlying stream.
Public property Supported by the XNA Framework CanRead Gets a value indicating whether the stream supports reading while decompressing a file. (Overrides Stream.CanRead.)
Public property Supported by the XNA Framework CanSeek Gets a value indicating whether the stream supports seeking. (Overrides Stream.CanSeek.)
Public property Supported by the XNA Framework CanTimeout Gets a value that determines whether the current stream can time out. (Inherited from Stream.)
Public property Supported by the XNA Framework CanWrite Gets a value indicating whether the stream supports writing. (Overrides Stream.CanWrite.)
Public property Supported by the XNA Framework Length This property is not supported and always throws a NotSupportedException. (Overrides Stream.Length.)
Public property Supported by the XNA Framework Position This property is not supported and always throws a NotSupportedException. (Overrides Stream.Position.)
Public property Supported by the XNA Framework ReadTimeout Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. (Inherited from Stream.)
Public property Supported by the XNA Framework WriteTimeout Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out. (Inherited from Stream.)
Top
  Name Description
Public method Supported by the XNA Framework BeginRead Begins an asynchronous read operation. (Consider using the Stream.ReadAsync method instead; see the Remarks section.) (Overrides Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).)
Public method Supported by the XNA Framework BeginWrite Begins an asynchronous write operation. (Consider using the Stream.WriteAsync method instead; see the Remarks section.) (Overrides Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).)
Public method Supported by the XNA Framework Close Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Instead of calling this method, ensure that the stream is properly disposed. (Inherited from Stream.)
Public method CopyTo(Stream) Reads the bytes from the current stream and writes them to another stream. (Inherited from Stream.)
Public method CopyTo(Stream, Int32) Reads the bytes from the current stream and writes them to another stream, using a specified buffer size. (Inherited from Stream.)
Public method CopyToAsync(Stream) Asynchronously reads the bytes from the current stream and writes them to another stream. (Inherited from Stream.)
Public method CopyToAsync(Stream, Int32) Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size. (Inherited from Stream.)
Public method CopyToAsync(Stream, Int32, CancellationToken) Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token. (Inherited from Stream.)
Public method CreateObjRef Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.)
Protected method Supported by the XNA Framework CreateWaitHandle Obsolete. Allocates a WaitHandle object. (Inherited from Stream.)
Public method Supported by the XNA Framework Dispose() Releases all resources used by the Stream. (Inherited from Stream.)
Protected method Supported by the XNA Framework Dispose(Boolean) Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources. (Overrides Stream.Dispose(Boolean).)
Public method Supported by the XNA Framework EndRead Waits for the pending asynchronous read to complete. (Consider using the the Stream.ReadAsync method instead; see the Remarks section.) (Overrides Stream.EndRead(IAsyncResult).)
Public method Supported by the XNA Framework EndWrite Handles the end of an asynchronous write operation. (Consider using the Stream.WriteAsync method instead; see the Remarks section.) (Overrides Stream.EndWrite(IAsyncResult).)
Public method Supported by the XNA Framework Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Supported by the XNA Framework Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method Supported by the XNA Framework Flush Flushes the contents of the internal buffer of the current GZipStream object to the underlying stream. (Overrides Stream.Flush().)
Public method FlushAsync() Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device. (Inherited from Stream.)
Public method FlushAsync(CancellationToken) Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests. (Inherited from Stream.)
Public method Supported by the XNA Framework GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetLifetimeService Retrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public method Supported by the XNA Framework GetType Gets the Type of the current instance. (Inherited from Object.)
Public method InitializeLifetimeService Obtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Protected method Supported by the XNA Framework MemberwiseClone() Creates a shallow copy of the current Object. (Inherited from Object.)
Protected method MemberwiseClone(Boolean) Creates a shallow copy of the current MarshalByRefObject object. (Inherited from MarshalByRefObject.)
Protected method ObjectInvariant Infrastructure. Obsolete. Provides support for a Contract. (Inherited from Stream.)
Public method Supported by the XNA Framework Read Reads a number of decompressed bytes into the specified byte array. (Overrides Stream.Read(Byte[], Int32, Int32).)
Public method ReadAsync(Byte[], Int32, Int32) Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. (Inherited from Stream.)
Public method ReadAsync(Byte[], Int32, Int32, CancellationToken) Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests. (Inherited from Stream.)
Public method Supported by the XNA Framework ReadByte Reads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream. (Inherited from Stream.)
Public method Supported by the XNA Framework Seek This property is not supported and always throws a NotSupportedException. (Overrides Stream.Seek(Int64, SeekOrigin).)
Public method Supported by the XNA Framework SetLength This property is not supported and always throws a NotSupportedException. (Overrides Stream.SetLength(Int64).)
Public method Supported by the XNA Framework ToString Returns a string that represents the current object. (Inherited from Object.)
Public method Supported by the XNA Framework Write Writes compressed bytes to the underlying stream from the specified byte array. (Overrides Stream.Write(Byte[], Int32, Int32).)
Public method WriteAsync(Byte[], Int32, Int32) Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. (Inherited from Stream.)
Public method WriteAsync(Byte[], Int32, Int32, CancellationToken) Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests. (Inherited from Stream.)
Public method Supported by the XNA Framework WriteByte Writes a byte to the current position in the stream and advances the position within the stream by one byte. (Inherited from Stream.)
Top
  Name Description
Public Extension Method AsInputStream Converts a managed stream in the .NET APIs for Metro style apps to an input stream in the Windows Runtime. (Defined by WindowsRuntimeStreamExtensions.)
Public Extension Method AsOutputStream Converts a managed stream in the .NET APIs for Metro style apps to an output stream in the Windows Runtime. (Defined by WindowsRuntimeStreamExtensions.)
Top

This class represents the gzip data format, which uses an industry-standard algorithm for lossless file compression and decompression. The format includes a cyclic redundancy check value for detecting data corruption. The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. The format can be readily implemented in a manner not covered by patents.

Starting with the .NET Framework 4.5 Beta, the DeflateStream class uses the zlib library for compression. As a result, it provides a better compression algorithm and, in most cases, a smaller compressed file than it provides in earlier versions of the .NET Framework.

Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools; however, this class does not inherently provide functionality for adding files to or extracting files from zip archives.

The compression functionality in DeflateStream and GZipStream is exposed as a stream. Data is read on a byte-by-byte basis, so it is not possible to perform multiple passes to determine the best method for compressing entire files or large blocks of data. The DeflateStream and GZipStream classes are best used on uncompressed sources of data. If the source data is already compressed, using these classes may actually increase the size of the stream.

Notes to Inheritors

When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

The following example shows how to use the GZipStream class to compress and decompress a directory of files.


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

namespace zip
{

    public class Program
    {

        public static void Main()
        {
            string dirpath = @"c:\users\public\reports";

            DirectoryInfo di = new DirectoryInfo(dirpath);

            foreach (FileInfo fi in di.GetFiles())
            {
                Compress(fi);
            }

            foreach (FileInfo fi in di.GetFiles("*.gz"))
            {
                Decompress(fi);
            }
        }

        public static void Compress(FileInfo fi)
        {
            using (FileStream inFile = fi.OpenRead())
            {
                if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fi.Extension != ".gz")
                {
                    using (FileStream outFile = File.Create(fi.FullName + ".gz"))
                    {
                        using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
                        {
                            inFile.CopyTo(Compress);
                            Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                                fi.Name, fi.Length.ToString(), outFile.Length.ToString());
                        }
                    }
                }
            }
        }

        public static void Decompress(FileInfo fi)
        {
            using (FileStream inFile = fi.OpenRead())
            {
                string curFile = fi.FullName;
                string origName = curFile.Remove(curFile.Length - fi.Extension.Length);

                using (FileStream outFile = File.Create(origName))
                {
                    using (GZipStream Decompress = new GZipStream(inFile, CompressionMode.Decompress))
                    {
            		    Decompress.CopyTo(outFile);
                        Console.WriteLine("Decompressed: {0}", fi.Name);
                    }
                }
            }
        }
    }
}


.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8 Consumer Preview, Windows Server 8 Beta, Windows 7, Windows Server 2008 SP2, Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)