Compartilhar via


DeflateStream Classe

Definição

Fornece métodos e propriedades para compactar e descompactar fluxos usando o algoritmo Deflate.

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 arquivo.

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

public static class FileCompressionModeExample
{
    private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    private const string OriginalFileName = "original.txt";
    private const string CompressedFileName = "compressed.dfl";
    private const string DecompressedFileName = "decompressed.txt";

    public static void Run()
    {
        CreateFileToCompress();
        CompressFile();
        DecompressFile();
        PrintResults();
        DeleteFiles();

        /*
         Output:

            The original file 'original.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

            The compressed file 'compressed.dfl' is 265 bytes.

            The decompressed file 'decompressed.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
         */
    }

    private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);

    private static void CompressFile()
    {
        using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
        using FileStream compressedFileStream = File.Create(CompressedFileName);
        using var compressor = new DeflateStream(compressedFileStream, CompressionMode.Compress);
        originalFileStream.CopyTo(compressor);
    }

    private static void DecompressFile()
    {
        using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open);
        using FileStream outputFileStream = File.Create(DecompressedFileName);
        using var decompressor = new DeflateStream(compressedFileStream, CompressionMode.Decompress);
        decompressor.CopyTo(outputFileStream);
    }

    private static void PrintResults()
    {
        long originalSize = new FileInfo(OriginalFileName).Length;
        long compressedSize = new FileInfo(CompressedFileName).Length;
        long decompressedSize = new FileInfo(DecompressedFileName).Length;

        Console.WriteLine($"The original file '{OriginalFileName}' is {originalSize} bytes. Contents: \"{File.ReadAllText(OriginalFileName)}\"");
        Console.WriteLine($"The compressed file '{CompressedFileName}' is {compressedSize} bytes.");
        Console.WriteLine($"The decompressed file '{DecompressedFileName}' is {decompressedSize} bytes. Contents: \"{File.ReadAllText(DecompressedFileName)}\"");
    }

    private static void DeleteFiles()
    {
        File.Delete(OriginalFileName);
        File.Delete(CompressedFileName);
        File.Delete(DecompressedFileName);
    }
}
Imports System.IO
Imports System.IO.Compression

Module FileCompressionModeExample
    Private Const Message As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
    Private Const OriginalFileName As String = "original.txt"
    Private Const CompressedFileName As String = "compressed.dfl"
    Private Const DecompressedFileName As String = "decompressed.txt"

    Sub Main()
        CreateFileToCompress()
        CompressFile()
        DecompressFile()
        PrintResults()
        DeleteFiles()

        'Output:

        '   The original file 'original.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

        '   The compressed file 'compressed.dfl' weighs 265 bytes.

        '   The decompressed file 'decompressed.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

    End Sub

    Private Sub CreateFileToCompress()
        File.WriteAllText(OriginalFileName, Message)
    End Sub

    Private Sub CompressFile()
        Using originalFileStream As FileStream = File.Open(OriginalFileName, FileMode.Open)
            Using compressedFileStream As FileStream = File.Create(CompressedFileName)
                Using compressor = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                    originalFileStream.CopyTo(compressor)
                End Using
            End Using
        End Using
    End Sub

    Private Sub DecompressFile()
        Using compressedFileStream As FileStream = File.Open(CompressedFileName, FileMode.Open)
            Using outputFileStream As FileStream = File.Create(DecompressedFileName)
                Using decompressor = New DeflateStream(compressedFileStream, CompressionMode.Decompress)
                    decompressor.CopyTo(outputFileStream)
                End Using
            End Using
        End Using
    End Sub

    Private Sub PrintResults()
        Dim originalSize As Long = New FileInfo(OriginalFileName).Length
        Dim compressedSize As Long = New FileInfo(CompressedFileName).Length
        Dim decompressedSize As Long = New FileInfo(DecompressedFileName).Length

        Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes. Contents: ""{File.ReadAllText(OriginalFileName)}""")
        Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.")
        Console.WriteLine($"The decompressed file '{DecompressedFileName}' weighs {decompressedSize} bytes. Contents: ""{File.ReadAllText(DecompressedFileName)}""")
    End Sub

    Private Sub DeleteFiles()
        File.Delete(OriginalFileName)
        File.Delete(CompressedFileName)
        File.Delete(DecompressedFileName)
    End Sub
End Module

Comentários

Essa classe representa o algoritmo Deflate, que é um algoritmo padrão do setor para compactação e descompactação de arquivos sem perda. A partir do .NET Framework 4.5, a classe DeflateStream usa a biblioteca zlib. Como resultado, ele fornece um algoritmo de compactação melhor e, na maioria dos casos, um arquivo compactado menor do que fornece em versões anteriores do .NET Framework.

Essa classe não fornece inerentemente funcionalidade para adicionar arquivos ou extrair arquivos de arquivos zip. Para trabalhar com arquivos zip, use as classes ZipArchive e ZipArchiveEntry.

A classe DeflateStream usa o mesmo algoritmo de compactação que o formato de dados gzip usado pela classe GZipStream.

A funcionalidade de compactação em DeflateStream e GZipStream é exposta como um fluxo. Os dados são lidos por 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. As classes DeflateStream e GZipStream são mais usadas em fontes de dados não compactadas. Se os dados de origem já estiverem compactados, o uso dessas classes poderá realmente aumentar o tamanho do fluxo.

Construtores

DeflateStream(Stream, CompressionLevel)

Inicializa uma nova instância da classe DeflateStream usando o fluxo e o nível de compactação especificados.

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.

DeflateStream(Stream, CompressionMode)

Inicializa uma nova instância da classe DeflateStream usando o modo de fluxo e compactação especificados.

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.

DeflateStream(Stream, ZLibCompressionOptions, Boolean)

Fornece métodos e propriedades para compactar e descompactar fluxos usando o algoritmo Deflate.

Propriedades

BaseStream

Obtém uma referência ao fluxo subjacente.

CanRead

Obtém um valor que indica se o fluxo dá suporte à leitura durante a descompactação de um arquivo.

CanSeek

Obtém um valor que indica se o fluxo dá suporte à busca.

CanTimeout

Obtém um valor que determina se o fluxo atual pode acabar.

(Herdado de Stream)
CanWrite

Obtém um valor que indica se o fluxo dá suporte à gravação.

Length

Essa propriedade não tem suporte e sempre lança um NotSupportedException.

Position

Essa propriedade não tem suporte e sempre lança um NotSupportedException.

ReadTimeout

Obtém ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes do tempo limite.

(Herdado de Stream)
WriteTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará gravar antes do tempo limite.

(Herdado de Stream)

Métodos

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

Inicia uma operação de leitura assíncrona. (Considere usar o método ReadAsync(Byte[], Int32, Int32) em vez disso.)

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

Inicia uma operação de leitura assíncrona. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.)

(Herdado de Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de gravação assíncrona. (Considere usar o método WriteAsync(Byte[], Int32, Int32) em vez disso.)

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

Inicia uma operação de gravação assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.)

(Herdado de Stream)
Close()

Fecha o fluxo atual e libera todos os recursos (como soquetes e identificadores de arquivo) associados ao fluxo atual. Em vez de chamar esse método, verifique se o fluxo foi descartado corretamente.

(Herdado de Stream)
CopyTo(Stream)

Lê os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo Deflate atual e os grava em outro fluxo, usando um tamanho de buffer especificado.

CopyTo(Stream, Int32)

Lê os bytes do fluxo atual e os grava em outro fluxo, usando um tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo, usando um tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

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

Lê assíncronamente os bytes do fluxo Deflate atual e os grava em outro fluxo, usando um tamanho de buffer especificado.

CopyToAsync(Stream, Int32, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento e tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
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.

(Herdado de MarshalByRefObject)
CreateWaitHandle()
Obsoleto.
Obsoleto.
Obsoleto.

Aloca um objeto WaitHandle.

(Herdado de Stream)
Dispose()

Libera todos os recursos usados pelo Stream.

(Herdado de Stream)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo DeflateStream e, opcionalmente, libera os recursos gerenciados.

DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo DeflateStream.

DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo Stream.

(Herdado de Stream)
EndRead(IAsyncResult)

Aguarda a conclusão da leitura assíncrona pendente. (Considere usar o método ReadAsync(Byte[], Int32, Int32) em vez disso.)

EndRead(IAsyncResult)

Aguarda a conclusão da leitura assíncrona pendente. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.)

(Herdado de Stream)
EndWrite(IAsyncResult)

Encerra uma operação de gravação assíncrona. (Considere usar o método WriteAsync(Byte[], Int32, Int32) em vez disso.)

EndWrite(IAsyncResult)

Encerra uma operação de gravação assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.)

(Herdado de Stream)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

A implementação atual desse método não tem nenhuma funcionalidade.

FlushAsync()

Limpa de forma assíncrona todos os buffers para esse fluxo e faz com que todos os dados em buffer sejam gravados no dispositivo subjacente.

(Herdado de Stream)
FlushAsync(CancellationToken)

Limpa de forma assíncrona todos os buffers para esse fluxo Deflate, faz com que todos os dados em buffer sejam gravados no dispositivo subjacente e monitora solicitações de cancelamento.

FlushAsync(CancellationToken)

Limpa de forma assíncrona todos os buffers para esse fluxo, faz com que todos os dados em buffer sejam gravados no dispositivo subjacente e monitora solicitações de cancelamento.

(Herdado de Stream)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
ObjectInvariant()
Obsoleto.

Fornece suporte para um Contract.

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

Lê vários bytes descompactados na matriz de bytes especificada.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo Deflate atual em um intervalo de bytes e avança a posição dentro do fluxo Deflate pelo número de bytes lidos.

Read(Span<Byte>)

Quando substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

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

Lê de forma assíncrona uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

(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 dentro do fluxo Deflate pelo número de bytes lidos e monitora solicitações de cancelamento.

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

Lê de forma assíncrona uma sequência de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de Stream)
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 dentro do fluxo Deflate pelo número de bytes lidos e monitora solicitações de cancelamento.

ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Lê pelo menos um número mínimo de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos.

(Herdado de Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Lê de forma assíncrona pelo menos um número mínimo de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento.

(Herdado de Stream)
ReadByte()

Lê um byte do fluxo Deflate e avança a posição dentro do fluxo por um byte ou retorna -1 se estiver no final do fluxo Deflate.

ReadByte()

Lê um byte do fluxo e avança a posição dentro do fluxo por um byte ou retorna -1 se estiver no final do fluxo.

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

count número de bytes do fluxo atual e avança a posição dentro do fluxo.

(Herdado de Stream)
ReadExactly(Span<Byte>)

Lê bytes do fluxo atual e avança a posição dentro do fluxo até que a buffer seja preenchida.

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

Lê de forma assíncrona count número de bytes do fluxo atual, avança a posição dentro do fluxo e monitora solicitações de cancelamento.

(Herdado de Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Lê bytes de forma assíncrona do fluxo atual, avança a posição dentro do fluxo até que o buffer seja preenchido e monitore as solicitações de cancelamento.

(Herdado de Stream)
Seek(Int64, SeekOrigin)

Essa operação não tem suporte e sempre lança um NotSupportedException.

SetLength(Int64)

Essa operação não tem suporte e sempre lança um NotSupportedException.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

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

Grava bytes compactados no fluxo subjacente da matriz de bytes especificada.

Write(ReadOnlySpan<Byte>)

Grava uma sequência de bytes no fluxo Deflate atual e avança a posição atual dentro desse fluxo Deflate pelo número de bytes gravados.

Write(ReadOnlySpan<Byte>)

Quando substituído em uma classe derivada, grava uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes gravados.

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

Grava de forma assíncrona uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes gravados.

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

Grava de forma assíncrona bytes compactados no fluxo Deflate subjacente da matriz de bytes especificada.

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

Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento.

(Herdado de Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona bytes compactados no fluxo Deflate subjacente da região de memória somente leitura especificada.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento.

(Herdado de Stream)
WriteByte(Byte)

Grava um byte no fluxo Deflate atual e avança a posição atual dentro desse fluxo Deflate por um.

WriteByte(Byte)

Grava um byte na posição atual no fluxo e avança a posição dentro do fluxo por um byte.

(Herdado de Stream)

Métodos de Extensão

CopyToAsync(Stream, PipeWriter, CancellationToken)

Lê assíncronamente os bytes do Stream e os grava no PipeWriterespecificado usando um token de cancelamento.

AsInputStream(Stream)

Converte um fluxo gerenciado no .NET para aplicativos da Windows Store em um fluxo de entrada no Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerenciado no .NET para aplicativos da Windows Store em um fluxo de saída no Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado em um fluxo de acesso aleatório.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura como as esperas nas tarefas retornadas de um descartável assíncrono serão executadas.

Aplica-se a

Confira também