Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс DeflateStream

 

Опубликовано: Октябрь 2016

Предоставляет методы и свойства для сжатия и распаковки потоков с использованием алгоритма Deflate.

Пространство имен:   System.IO.Compression
Сборка:  System (в System.dll)

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.Compression.DeflateStream

public class DeflateStream : Stream

ИмяОписание
System_CAPS_pubmethodDeflateStream(Stream, CompressionLevel)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и уровня сжатия.

System_CAPS_pubmethodDeflateStream(Stream, CompressionLevel, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и уровня сжатия, а также при необходимости оставляет поток открытым.

System_CAPS_pubmethodDeflateStream(Stream, CompressionMode)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и режима сжатия.

System_CAPS_pubmethodDeflateStream(Stream, CompressionMode, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и режима сжатия, а также при необходимости оставляет поток открытым.

ИмяОписание
System_CAPS_pubpropertyBaseStream

Возвращает ссылку на основной поток.

System_CAPS_pubpropertyCanRead

Возвращает значение, указывающее, поддерживает ли поток чтение во время распаковки файла.(Переопределяет Stream.CanRead.)

System_CAPS_pubpropertyCanSeek

Возвращает значение, указывающее, поддерживает ли поток поиск.(Переопределяет Stream.CanSeek.)

System_CAPS_pubpropertyCanTimeout

Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания.(Наследуется от Stream.)

System_CAPS_pubpropertyCanWrite

Возвращает значение, определяющее, поддерживает ли поток операции записи.(Переопределяет Stream.CanWrite.)

System_CAPS_pubpropertyLength

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.(Переопределяет Stream.Length.)

System_CAPS_pubpropertyPosition

Это свойство не поддерживается и всегда вызывает исключение NotSupportedException.(Переопределяет Stream.Position.)

System_CAPS_pubpropertyReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию чтения, прежде чем истечет время ожидания.(Наследуется от Stream.)

System_CAPS_pubpropertyWriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период, в течение которого поток будет пытаться выполнить операцию записи, прежде чем истечет время ожидания.(Наследуется от Stream.)

ИмяОписание
System_CAPS_pubmethodBeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает операцию асинхронного чтения. (Попробуйте вместо этого использовать метод ReadAsync; см. раздел "Примечания".)(Переопределяет Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).)

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

Начинает операцию асинхронной записи. (Попробуйте вместо этого использовать метод Stream.WriteAsync; см. раздел "Примечания".)(Переопределяет Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).)

System_CAPS_pubmethodClose()

Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован.(Наследуется от Stream.)

System_CAPS_pubmethodCopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток.(Наследуется от Stream.)

System_CAPS_pubmethodCopyTo(Stream, Int32)

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.(Наследуется от Stream.)

System_CAPS_pubmethodCopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток.(Наследуется от Stream.)

System_CAPS_pubmethodCopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.(Наследуется от Stream.)

System_CAPS_pubmethodCopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены.(Наследуется от Stream.)

System_CAPS_pubmethodCreateObjRef(Type)

Создает объект, который содержит все необходимые сведения, необходимые для создания прокси-сервер, используемый для обмена данными с удаленным объектом.(Наследуется от MarshalByRefObject.)

System_CAPS_protmethodCreateWaitHandle()

Устарело. Выделяет объект WaitHandle.(Наследуется от Stream.)

System_CAPS_pubmethodDispose()

Освобождает все ресурсы, занятые модулем Stream.(Наследуется от Stream.)

System_CAPS_protmethodDispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом DeflateStream, а при необходимости освобождает также управляемые ресурсы.(Переопределяет Stream.Dispose(Boolean).)

System_CAPS_pubmethodEndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения. (Попробуйте вместо этого использовать метод ReadAsync; см. раздел "Примечания".)(Переопределяет Stream.EndRead(IAsyncResult).)

System_CAPS_pubmethodEndWrite(IAsyncResult)

Заканчивает операцию асинхронной записи. (Попробуйте вместо этого использовать метод Stream.WriteAsync; см. раздел "Примечания".)(Переопределяет Stream.EndWrite(IAsyncResult).)

System_CAPS_pubmethodEquals(Object)

Определяет, равен ли заданный объект текущему объекту.(Наследуется от Object.)

System_CAPS_protmethodFinalize()

Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как он будет уничтожен во время сборки мусора.(Наследуется от Object.)

System_CAPS_pubmethodFlush()

Текущая реализация этого метода не функциональна.(Переопределяет Stream.Flush().)

System_CAPS_pubmethodFlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.(Наследуется от Stream.)

System_CAPS_pubmethodFlushAsync(CancellationToken)

Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены.(Наследуется от Stream.)

System_CAPS_pubmethodGetHashCode()

Служит хэш-функцией по умолчанию.(Наследуется от Object.)

System_CAPS_pubmethodGetLifetimeService()

Извлекает объект текущее время существования службы, который управляет политикой времени существования данного экземпляра.(Наследуется от MarshalByRefObject.)

System_CAPS_pubmethodGetType()

Возвращает объект Type для текущего экземпляра.(Наследуется от Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.(Наследуется от MarshalByRefObject.)

System_CAPS_protmethodMemberwiseClone()

Создает неполную копию текущего объекта Object.(Наследуется от Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Создает неполную копию текущего MarshalByRefObject объекта.(Наследуется от MarshalByRefObject.)

System_CAPS_protmethodObjectInvariant()

Устарело. Этот API поддерживает инфраструктуру продукт, и его не следует использовать напрямую из кода. Обеспечивает поддержку для Contract.(Наследуется от Stream.)

System_CAPS_pubmethodRead(Byte[], Int32, Int32)

Считывает число распакованных байтов в указанный массив байтов.(Переопределяет Stream.Read(Byte[], Int32, Int32).)

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.(Наследуется от Stream.)

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

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.(Наследуется от Stream.)

System_CAPS_pubmethodReadByte()

Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока.(Наследуется от Stream.)

System_CAPS_pubmethodSeek(Int64, SeekOrigin)

Эта операция не поддерживается и всегда вызывает исключение NotSupportedException.(Переопределяет Stream.Seek(Int64, SeekOrigin).)

System_CAPS_pubmethodSetLength(Int64)

Эта операция не поддерживается и всегда вызывает исключение NotSupportedException.(Переопределяет Stream.SetLength(Int64).)

System_CAPS_pubmethodToString()

Возвращает строку, представляющую текущий объект.(Наследуется от Object.)

System_CAPS_pubmethodWrite(Byte[], Int32, Int32)

Записывает сжатые байты в основной поток из указанного массива байтов.(Переопределяет Stream.Write(Byte[], Int32, Int32).)

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.(Наследуется от Stream.)

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

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.(Наследуется от Stream.)

System_CAPS_pubmethodWriteByte(Byte)

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.(Наследуется от Stream.)

This class represents the Deflate algorithm, which is an industry-standard algorithm for lossless file compression and decompression. Starting with the net_v45, the T:System.IO.Compression.DeflateStream class uses the zlib library. 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.

This class does not inherently provide functionality for adding files to or extracting files from zip archives. To work with zip archives, use the T:System.IO.Compression.ZipArchive and the T:System.IO.Compression.ZipArchiveEntry classes.

The T:System.IO.Compression.DeflateStream class uses the same compression algorithm as the gzip data format used by the T:System.IO.Compression.GZipStream class.

The compression functionality in T:System.IO.Compression.DeflateStream and T:System.IO.Compression.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 T:System.IO.Compression.DeflateStream and T:System.IO.Compression.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.

The following example shows how to use the T:System.IO.Compression.DeflateStream class to compress and decompress a directory of files.

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

public class Program
{
    static string directoryPath = @"c:\temp";
    public static void Main()
    {

        DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
           Compress(directorySelected);


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

    public static void Compress(DirectoryInfo directorySelected)
    {


        foreach (FileInfo file in directorySelected.GetFiles("*.xml"))
        using (FileStream originalFileStream = file.OpenRead())
        {
            if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden)
                != FileAttributes.Hidden & file.Extension != ".cmp")
            {
                using (FileStream compressedFileStream = File.Create(file.FullName + ".cmp"))
                {
                    using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress))
                    {
                        originalFileStream.CopyTo(compressionStream);
                    }
                }

                FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);
            }
        }
    }

    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 (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
        	    {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
        	    }
        	}
        }
    }
}

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 2.0
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Windows Phone
Доступно с 8.1

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: