GZipStream Класс

Определение

Предоставляет методы и свойства, используемые для сжатия и распаковки потоков с использованием спецификации формата GZip.Provides methods and properties used to compress and decompress streams by using the GZip data format specification.

public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
    inherit Stream
Public Class GZipStream
Inherits Stream
Наследование

Примеры

В следующем примере показано, как использовать GZipStream класс для сжатия и распаковки каталога файлов.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;

public class Program
{
    private static string directoryPath = @".\temp";
    public static void Main()
    {
        DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
        Compress(directorySelected);

        foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
        {
            Decompress(fileToDecompress);
        }
    }

    public static void Compress(DirectoryInfo directorySelected)
    {
        foreach (FileInfo fileToCompress in directorySelected.GetFiles())
        {
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
                if ((File.GetAttributes(fileToCompress.FullName) & 
                   FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                {
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                    {
                        using (GZipStream compressionStream = new GZipStream(compressedFileStream, 
                           CompressionMode.Compress))
                        {
                            originalFileStream.CopyTo(compressionStream);

                        }
                    }
                    FileInfo info = new FileInfo(directoryPath + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
                }

            }
        }
    }

    public static void Decompress(FileInfo fileToDecompress)
    {
        using (FileStream originalFileStream = fileToDecompress.OpenRead())
        {
            string currentFileName = fileToDecompress.FullName;
            string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

            using (FileStream decompressedFileStream = File.Create(newFileName))
            {
                using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine($"Decompressed: {fileToDecompress.Name}");
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Private directoryPath As String = ".\temp"
    Public Sub Main()
        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)

        For Each fileToDecompress As FileInfo In directorySelected.GetFiles("*.gz")
            Decompress(fileToDecompress)
        Next
    End Sub

    Public Sub Compress(directorySelected As DirectoryInfo)
        For Each fileToCompress As FileInfo In directorySelected.GetFiles()
            Using originalFileStream As FileStream = fileToCompress.OpenRead()
                If (File.GetAttributes(fileToCompress.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And fileToCompress.Extension <> ".gz" Then
                    Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName & ".gz")
                        Using compressionStream As New GZipStream(compressedFileStream, CompressionMode.Compress)

                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using
                    Dim info As New FileInfo(directoryPath & Path.DirectorySeparatorChar & fileToCompress.Name & ".gz")
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.")

                End If
            End Using
        Next
    End Sub


    Private Sub Decompress(ByVal fileToDecompress As FileInfo)
        Using originalFileStream As FileStream = fileToDecompress.OpenRead()
            Dim currentFileName As String = fileToDecompress.FullName
            Dim newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length)

            Using decompressedFileStream As FileStream = File.Create(newFileName)
                Using decompressionStream As GZipStream = New GZipStream(originalFileStream, CompressionMode.Decompress)
                    decompressionStream.CopyTo(decompressedFileStream)
                    Console.WriteLine($"Decompressed: {fileToDecompress.Name}")
                End Using
            End Using
        End Using
    End Sub
End Module

Комментарии

Этот класс представляет формат данных Gzip, использующий промышленный алгоритм для сжатия и распаковки файлов без потерь.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. Формат данных Gzip использует тот же алгоритм, что DeflateStream и класс, но может быть расширен для использования других форматов сжатия.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.

Начиная с .NET Framework 4.5.NET Framework 4.5 DeflateStream , класс использует библиотеку zlib для сжатия.Starting with the .NET Framework 4.5.NET Framework 4.5, the DeflateStream class uses the zlib library for compression. В результате он обеспечивает улучшенный алгоритм сжатия и, в большинстве случаев, меньший сжатый файл, чем он предоставляется в более ранних версиях .NET Framework.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.

Сжатые GZipStream объекты, записанные в файл с расширением gz, можно распаковать с помощью многих распространенных средств сжатия. Однако этот класс не предоставляет функции для добавления файлов в ZIP-архивы и извлечения файлов из них.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.

Функция сжатия в DeflateStream и GZipStream предоставляется в виде потока.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. Классы DeflateStream иGZipStream лучше использовать в несжатых источниках данных.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.

Примечания для тех, кто наследует этот метод

При наследовании из GZipStreamнеобходимо переопределить следующие члены: CanSeek, CanWriteи CanRead.When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

Конструкторы

GZipStream(Stream, CompressionLevel)

Инициализирует новый экземпляр класса GZipStream с использованием указанного потока и уровня сжатия.Initializes a new instance of the GZipStream class by using the specified stream and compression level.

GZipStream(Stream, CompressionLevel, Boolean)

Инициализирует новый экземпляр класса GZipStream с помощью указанного потока и уровня сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the GZipStream class by using the specified stream and compression level, and optionally leaves the stream open.

GZipStream(Stream, CompressionMode)

Инициализирует новый экземпляр класса GZipStream с использованием указанного потока и режима сжатия.Initializes a new instance of the GZipStream class by using the specified stream and compression mode.

GZipStream(Stream, CompressionMode, Boolean)

Инициализирует новый экземпляр класса GZipStream с помощью указанного потока и режима сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the GZipStream class by using the specified stream and compression mode, and optionally leaves the stream open.

Свойства

BaseStream

Возвращает ссылку на основной поток.Gets a reference to the underlying stream.

CanRead

Возвращает значение, указывающее, поддерживает ли поток чтение во время распаковки файла.Gets a value indicating whether the stream supports reading while decompressing a file.

CanSeek

Возвращает значение, указывающее, поддерживает ли поток поиск.Gets a value indicating whether the stream supports seeking.

CanTimeout

Получает значение, которое показывает, может ли для данного потока истечь время ожидания.Gets a value that determines whether the current stream can time out.

(Унаследовано от Stream)
CanWrite

Возвращает значение, определяющее, поддерживает ли поток операции записи.Gets a value indicating whether the stream supports writing.

Length

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.This property is not supported and always throws a NotSupportedException.

Position

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.This property is not supported and always throws a NotSupportedException.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию чтения, прежде чем истечет время ожидания.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(Унаследовано от Stream)
WriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию записи, прежде чем истечет время ожидания.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Унаследовано от Stream)

Методы

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

Начинает операцию асинхронного чтения.Begins an asynchronous read operation. (Вместо него рекомендуется использовать метод ReadAsync(Byte[], Int32, Int32).)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

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

Начинает операцию асинхронной записи.Begins an asynchronous write operation. (Вместо него рекомендуется использовать метод WriteAsync(Byte[], Int32, Int32).)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

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.

(Унаследовано от Stream)
CopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток.Reads the bytes from the current stream and writes them to another stream.

(Унаследовано от Stream)
CopyTo(Stream, Int32)

Считывает байты из текущего потока GZip и записывает их в другой поток, используя указанный размер буфера.Reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток.Asynchronously reads the bytes from the current stream and writes them to another stream.

(Унаследовано от Stream)
CopyToAsync(Stream, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока GZip и записывает их в другой поток, используя указанный размер буфера.Asynchronously reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Унаследовано от MarshalByRefObject)
CreateWaitHandle()

Размещает объект WaitHandle.Allocates a WaitHandle object.

(Унаследовано от Stream)
Dispose()

Освобождает все ресурсы, занятые модулем Stream.Releases all resources used by the Stream.

(Унаследовано от Stream)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом GZipStream, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources.

DisposeAsync()

Асинхронно освобождает неуправляемые ресурсы, используемые классом GZipStream.Asynchronously releases the unmanaged resources used by the GZipStream.

EndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения.Waits for the pending asynchronous read to complete. (Вместо него рекомендуется использовать метод ReadAsync(Byte[], Int32, Int32).)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

EndWrite(IAsyncResult)

Обрабатывает завершение операции асинхронной записи.Handles the end of an asynchronous write operation. (Вместо него рекомендуется использовать метод WriteAsync(Byte[], Int32, Int32).)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Flush()

Текущая реализация этого метода не функциональна.The current implementation of this method has no functionality.

FlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Унаследовано от Stream)
FlushAsync(CancellationToken)

Асинхронно очищает все буферы данного потока GZip, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены.Asynchronously clears all buffers for this GZip stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetLifetimeService()

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

(Унаследовано от MarshalByRefObject)
ObjectInvariant()

Обеспечивает поддержку для Contract.Provides support for a Contract.

(Унаследовано от Stream)
Read(Byte[], Int32, Int32)

Считывает число распакованных байтов в указанный массив байтов.Reads a number of decompressed bytes into the specified byte array.

Read(Span<Byte>)

Считывает последовательность байтов из текущего потока GZip в диапазон байтов и перемещает позицию внутри потока GZip на число считанных байтов.Reads a sequence of bytes from the current GZip stream into a byte span and advances the position within the GZip stream by the number of bytes read.

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.

(Унаследовано от Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока GZip в массив байтов, перемещает позицию в потоке GZip на число считанных байтов и отслеживает запросы отмены.Asynchronously reads a sequence of bytes from the current GZip stream into a byte array, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока GZip в область памяти байтов, перемещает позицию в потоке GZip на число считанных байтов и отслеживает запросы отмены.Asynchronously reads a sequence of bytes from the current GZip stream into a byte memory region, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

Считывает байт из потока GZip и перемещает позицию в потоке на один байт или возвращает –1, если достигнут конец потока GZip.Reads a byte from the GZip stream and advances the position within the stream by one byte, or returns -1 if at the end of the GZip stream.

Seek(Int64, SeekOrigin)

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.This property is not supported and always throws a NotSupportedException.

SetLength(Int64)

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.This property is not supported and always throws a NotSupportedException.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)
Write(Byte[], Int32, Int32)

Записывает сжатые байты в основной поток GZip из указанного массива байтов.Writes compressed bytes to the underlying GZip stream from the specified byte array.

Write(ReadOnlySpan<Byte>)

Записывает последовательность байтов в текущий поток GZip из диапазона байтов только для чтения и перемещает текущую позицию внутри потока GZip на число записанных байтов.Writes a sequence of bytes to the current GZip stream from a read-only byte span and advances the current position within this GZip stream by the number of bytes written.

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.

(Унаследовано от Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно записывает сжатые байты в основной поток GZip из указанного массива байтов.Asynchronously writes compressed bytes to the underlying GZip stream from the specified byte array.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает сжатые байты в базовый поток GZip из заданной области памяти байтов только для чтения.Asynchronously writes compressed bytes to the underlying GZip stream from the specified read-only byte memory region.

WriteByte(Byte)

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.Writes a byte to the current position in the stream and advances the position within the stream by one byte.

(Унаследовано от Stream)

Явные реализации интерфейса

IDisposable.Dispose()

Освобождает все ресурсы, занятые модулем Stream.Releases all resources used by the Stream.

(Унаследовано от Stream)

Методы расширения

AsInputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Преобразует заданный поток в поток прямого доступа.Converts the specified stream to a random access stream.

Применяется к