DeflateStream Classe

Definição

Fornece métodos e propriedades para compactar e descompactar fluxos usando o algoritmo Deflate.Provides methods and properties for compressing and decompressing streams by using the Deflate algorithm.

public ref class DeflateStream : System::IO::Stream
public class DeflateStream : System.IO.Stream
type DeflateStream = class
    inherit Stream
Public Class DeflateStream
Inherits Stream
Herança
DeflateStream
Herança

Exemplos

O exemplo a seguir mostra como usar a classe DeflateStream para compactar e descompactar um diretório de arquivos.The following example shows how to use the 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);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Public Class Program
    Shared directoryPath As String = "c:\temp"
    Public Shared Sub Main()

        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)


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

    Public Shared Sub Compress(directorySelected As DirectoryInfo)

        For Each file__1 As FileInfo In directorySelected.GetFiles("*.xml")
            Using originalFileStream As FileStream = file__1.OpenRead()
                If (File.GetAttributes(file__1.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And file__1.Extension <> ".cmp" Then
                    Using compressedFileStream As FileStream = File.Create(file__1.FullName & ".cmp")
                        Using compressionStream As Compression.DeflateStream = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using

                    Dim info As New FileInfo(directoryPath & "\" & file__1.Name & ".cmp")
                    Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file__1.Name, file__1.Length, info.Length)
                End If
            End Using
        Next
    End Sub

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

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

Comentários

Essa classe representa o algoritmo Deflate, que é um algoritmo padrão do setor para compactação e descompactação de arquivos sem perdas.This class represents the Deflate algorithm, which is an industry-standard algorithm for lossless file compression and decompression. A partir do .NET Framework 4.5.NET Framework 4.5, a classe DeflateStream usa a biblioteca zlib.Starting with the .NET Framework 4.5.NET Framework 4.5, the DeflateStream class uses the zlib library. Como resultado, ele fornece um algoritmo de compactação melhor e, na maioria dos casos, um arquivo compactado menor do que ele fornece em versões anteriores do .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.

Essa classe não fornece inerentemente a funcionalidade para adicionar ou extrair arquivos de arquivos zip.This class does not inherently provide functionality for adding files to or extracting files from zip archives. Para trabalhar com arquivos zip, use as classes ZipArchive e ZipArchiveEntry.To work with zip archives, use the ZipArchive and the ZipArchiveEntry classes.

A classe DeflateStream usa o mesmo algoritmo de compactação que o formato de dados gzip usado pela classe GZipStream.The DeflateStream class uses the same compression algorithm as the gzip data format used by the GZipStream class.

A funcionalidade de compactação em DeflateStream e GZipStream é exposta como um fluxo.The compression functionality in DeflateStream and GZipStream is exposed as a stream. Os dados são lidos em uma base byte a byte, portanto, não é possível executar várias passagens para determinar o melhor método para compactar arquivos inteiros ou grandes blocos de dados.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. As classes DeflateStream e GZipStream são mais bem usadas em fontes de dados descompactadas.The DeflateStream and GZipStream classes are best used on uncompressed sources of data. Se os dados de origem já estiverem compactados, usar essas classes pode realmente aumentar o tamanho do fluxo.If the source data is already compressed, using these classes may actually increase the size of the stream.

Construtores

DeflateStream(Stream, CompressionLevel)

Inicializa uma nova instância da classe DeflateStream usando o fluxo e o nível de compressão especificados.Initializes a new instance of the DeflateStream class by using the specified stream and compression level.

DeflateStream(Stream, CompressionLevel, Boolean)

Inicializa uma nova instância da classe DeflateStream usando o fluxo e o nível de compactação especificados e, opcionalmente, deixa o fluxo aberto.Initializes a new instance of the DeflateStream class by using the specified stream and compression level, and optionally leaves the stream open.

DeflateStream(Stream, CompressionMode)

Inicializa uma nova instância da classe DeflateStream usando o fluxo e o modo de compactação especificados.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode.

DeflateStream(Stream, CompressionMode, Boolean)

Inicializa uma nova instância da classe DeflateStream usando o fluxo e o modo de compactação especificados e, opcionalmente, deixa o fluxo aberto.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode, and optionally leaves the stream open.

Propriedades

BaseStream

Obtém uma referência ao fluxo subjacente.Gets a reference to the underlying stream.

CanRead

Obtém um valor que indica se o fluxo dá suporte à leitura durante a descompactação de um arquivo.Gets a value indicating whether the stream supports reading while decompressing a file.

CanSeek

Obtém um valor que indica se o fluxo dá suporte à busca.Gets a value indicating whether the stream supports seeking.

CanTimeout

Obtém um valor que determina se o fluxo atual pode atingir o tempo limite.Gets a value that determines whether the current stream can time out.

(Herdado de Stream)
CanWrite

Obtém um valor que indica se o fluxo dá suporte à gravação.Gets a value indicating whether the stream supports writing.

Length

Atualmente, esta propriedade não tem suporte e sempre gera uma NotSupportedException.This property is not supported and always throws a NotSupportedException.

Position

Atualmente, esta propriedade não tem suporte e sempre gera uma NotSupportedException.This property is not supported and always throws a NotSupportedException.

ReadTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará realizar a leitura antes do tempo limite.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(Herdado de Stream)
WriteTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará realizar a gravação antes do tempo limite.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Herdado de Stream)

Métodos

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

Inicia uma operação de leitura assíncrona.Begins an asynchronous read operation. (Considere o uso do método ReadAsync(Byte[], Int32, Int32) em seu lugar.)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

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

Inicia uma operação de gravação assíncrona.Begins an asynchronous write operation. (Considere o uso do método WriteAsync(Byte[], Int32, Int32) em seu lugar.)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Close()

Fecha o fluxo atual e libera todos os recursos (como soquetes e identificadores de arquivos) associados ao fluxo atual.Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Em vez de chamar esse método, verifique se o fluxo é descartado corretamente.Instead of calling this method, ensure that the stream is properly disposed.

(Herdado de Stream)
CopyTo(Stream)

Lê os bytes do fluxo atual e os grava em outro fluxo.Reads the bytes from the current stream and writes them to another stream.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo Deflate atual e grava-os em outro fluxo usando um tamanho do buffer especificado.Reads the bytes from the current Deflate stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo.Asynchronously reads the bytes from the current stream and writes them to another stream.

(Herdado de Stream)
CopyToAsync(Stream, CancellationToken)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo usando um token de cancelamento especificado.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(Herdado de Stream)
CopyToAsync(Stream, Int32)

Lê de maneira assíncrona os bytes do fluxo atual e os grava em outro fluxo usando um tamanho do buffer especificado.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Herdado de Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Lê de forma assíncrona os bytes do fluxo Deflate atual e grava-os em outro fluxo usando um tamanho do buffer especificado.Asynchronously reads the bytes from the current Deflate stream and writes them to another stream, using a specified buffer size.

CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Herdado de MarshalByRefObject)
CreateWaitHandle()

Aloca um objeto WaitHandle.Allocates a WaitHandle object.

(Herdado de Stream)
Dispose()

Libera todos os recursos usados pelo Stream.Releases all resources used by the Stream.

(Herdado de Stream)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo DeflateStream e, opcionalmente, libera os recursos gerenciados.Releases the unmanaged resources used by the DeflateStream and optionally releases the managed resources.

DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo DeflateStream.Asynchronously releases the unmanaged resources used by the DeflateStream.

EndRead(IAsyncResult)

Aguarda a leitura assíncrona pendente ser concluída.Waits for the pending asynchronous read to complete. (Considere o uso do método ReadAsync(Byte[], Int32, Int32) em seu lugar.)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

EndWrite(IAsyncResult)

Finaliza uma operação de gravação assíncrona.Ends an asynchronous write operation. (Considere o uso do método WriteAsync(Byte[], Int32, Int32) em seu lugar.)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
Flush()

A implementação atual desse método não tem nenhuma funcionalidade.The current implementation of this method has no functionality.

FlushAsync()

Limpa de forma assíncrona todos os buffers nesse fluxo e faz com que os dados armazenados em buffer sejam gravados no dispositivo subjacente.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Herdado de Stream)
FlushAsync(CancellationToken)

Limpa todos os buffers nesse fluxo Deflate de forma assíncrona, faz com que os dados armazenados em buffer sejam gravados no dispositivo subjacente e monitora as solicitações de cancelamento.Asynchronously clears all buffers for this Deflate stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
InitializeLifetimeService()

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.Obtains a lifetime service object to control the lifetime policy for this instance.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.Creates a shallow copy of the current MarshalByRefObject object.

(Herdado de MarshalByRefObject)
ObjectInvariant()

Oferece suporte a um Contract.Provides support for a Contract.

(Herdado de Stream)
Read(Byte[], Int32, Int32)

Lê um número de bytes descompactados na matriz de bytes especificada.Reads a number of decompressed bytes into the specified byte array.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo Deflate atual em um intervalo de bytes e avança a posição no fluxo Deflate até o número de bytes lidos.Reads a sequence of bytes from the current Deflate stream into a byte span and advances the position within the Deflate stream by the number of bytes read.

ReadAsync(Byte[], Int32, Int32)

Lê uma sequência de bytes do fluxo atual de forma assíncrona e avança a posição no fluxo até o número de bytes lidos.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Herdado de Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo Deflate atual, grava-os em uma matriz de bytes, avança a posição no fluxo Deflate até o número de bytes lidos e monitora as solicitações de cancelamento.Asynchronously reads a sequence of bytes from the current Deflate stream, writes them to a byte array, advances the position within the Deflate stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo Deflate atual, grava-os em um intervalo de memória de bytes, avança a posição no fluxo Deflate até o número de bytes lidos e monitora as solicitações de cancelamento.Asynchronously reads a sequence of bytes from the current Deflate stream, writes them to a byte memory range, advances the position within the Deflate stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

Lê um byte do fluxo Deflate e avança a posição no fluxo em um byte ou retorna -1 caso esteja no final do fluxo Deflate.Reads a byte from the Deflate stream and advances the position within the stream by one byte, or returns -1 if at the end of the Deflate stream.

Seek(Int64, SeekOrigin)

Essa operação não tem suporte e sempre gera um NotSupportedException.This operation is not supported and always throws a NotSupportedException.

SetLength(Int64)

Essa operação não tem suporte e sempre gera um NotSupportedException.This operation is not supported and always throws a NotSupportedException.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)
Write(Byte[], Int32, Int32)

Grava bytes compactados no fluxo subjacente da matriz de bytes especificada.Writes compressed bytes to the underlying stream from the specified byte array.

Write(ReadOnlySpan<Byte>)

Grava uma sequência de bytes no fluxo Deflate atual e avança a posição atual nesse fluxo Deflate até o número de bytes gravados.Writes a sequence of bytes to the current Deflate stream and advances the current position within this Deflate stream by the number of bytes written.

WriteAsync(Byte[], Int32, Int32)

Grava assincronamente uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo no número de bytes gravados.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Herdado de Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Grava de forma assíncrona os bytes compactados no fluxo Deflate subjacente da matriz de bytes especificada.Asynchronously writes compressed bytes to the underlying Deflate stream from the specified byte array.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona os bytes compactados no fluxo Deflate subjacente da região de memória ROM especificada.Asynchronously writes compressed bytes to the underlying Deflate stream from the specified read-only memory region.

WriteByte(Byte)

Grava um byte na posição atual no fluxo e avança a posição dentro no fluxo em um byte.Writes a byte to the current position in the stream and advances the position within the stream by one byte.

(Herdado de Stream)

Implantações explícitas de interface

IDisposable.Dispose()

Libera todos os recursos usados pelo Stream.Releases all resources used by the Stream.

(Herdado de Stream)

Métodos de Extensão

AsInputStream(Stream)

Converte um fluxo gerenciado no .NET para Aplicativos da Windows Store em um fluxo de entrada no Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerenciado no .NET para Aplicativos da Windows Store em um fluxo de saída no Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado em um fluxo de acesso aleatório.Converts the specified stream to a random access stream.

Aplica-se a