DeflateStream Classe

Definição

Fornece métodos e propriedades para comprimir e descomprimir fluxos utilizando 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 seguinte mostra como usar a DeflateStream classe para comprimir e descomprimir um ficheiro.

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

Observações

Esta classe representa o algoritmo Deflate, que é um algoritmo padrão da indústria para compressão e descompressão de ficheiros sem perdas. A partir do .NET Framework 4.5, a classe DeflateStream utiliza a biblioteca zlib. Como resultado, fornece um melhor algoritmo de compressão e, na maioria dos casos, um ficheiro comprimido mais pequeno do que nas versões anteriores do .NET Framework.

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

A DeflateStream classe utiliza o mesmo algoritmo de compressão do formato de dados gzip usado pela GZipStream classe.

A funcionalidade de compressão em DeflateStream e GZipStream é exposta como um fluxo. Os dados são lidos byte a byte, pelo que não é possível realizar múltiplas passagens para determinar o melhor método para comprimir ficheiros inteiros ou blocos grandes de dados. As DeflateStream classes e GZipStream são melhor usadas em fontes de dados não comprimidas. Se os dados de origem já estiverem comprimidos, usar estas classes pode, na verdade, aumentar o tamanho do fluxo.

A sequência exata de bytes comprimidos devolvida por DeflateStream pode variar entre lançamentos de .NET, plataformas e motores de compressão subjacentes. Alterações nas versões do zlib, ajustes de algoritmos e otimizações de desempenho podem produzir resultados diferentes para os mesmos dados de entrada. Mas qualquer dado comprimido por DeflateStream pode sempre ser descomprimido para a sua forma original sem perdas.

Construtores

Name Description
DeflateStream(Stream, CompressionLevel, Boolean)

Inicializa uma nova instância da DeflateStream classe usando o fluxo e o nível de compressão especificados, e opcionalmente deixa o fluxo aberto.

DeflateStream(Stream, CompressionLevel)

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

DeflateStream(Stream, CompressionMode, Boolean)

Inicializa uma nova instância da DeflateStream classe usando o fluxo e o modo de compressão especificados, e opcionalmente deixa o fluxo aberto.

DeflateStream(Stream, CompressionMode)

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

Propriedades

Name Description
BaseStream

Recebe uma referência ao fluxo subjacente.

CanRead

Recebe um valor que indica se o fluxo suporta leitura enquanto descomprime um ficheiro.

CanSeek

Recebe um valor que indica se o fluxo suporta a procura.

CanTimeout

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

(Herdado de Stream)
CanWrite

Recebe um valor que indica se o fluxo suporta escrita.

Length

Esta propriedade não é suportada e lança sempre um NotSupportedException.

Position

Esta propriedade não é suportada e lança sempre um NotSupportedException.

ReadTimeout

Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes de expirar.

(Herdado de Stream)
WriteTimeout

Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tenta escrever antes de expirar.

(Herdado de Stream)

Métodos

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

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

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

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

Close()

Fecha o fluxo atual e liberta quaisquer recursos (como sockets e handles de ficheiros) associados ao fluxo atual. Em vez de chamar este método, certifique-se de que o fluxo é devidamente descartado.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo Deflate atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado.

CopyTo(Stream, Int32)

Lê os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyTo(Stream)

Lê os bytes do fluxo atual e escreve-os noutro fluxo. As posições de ambos os 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 escreve-os noutro fluxo, usando um token de cancelamento especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

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

A leitura assíncrona os bytes do fluxo Deflate atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado.

CopyToAsync(Stream, Int32, CancellationToken)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado e um token de cancelamento. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32)

Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os 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 escreve-os noutro fluxo. As posições de ambos os fluxos são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateWaitHandle()
Obsoleto.

Aloca um WaitHandle objeto.

(Herdado de Stream)
Dispose()

Liberta todos os recursos utilizados pelo Stream.

(Herdado de Stream)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo DeflateStream e opcionalmente liberta os recursos geridos.

DisposeAsync()

De forma assíncrona, liberta os recursos não geridos usados pelos DeflateStream.

EndRead(IAsyncResult)

Espera que a leitura assíncrona pendente seja concluída. (Considere usar o ReadAsync(Byte[], Int32, Int32) método em vez disso.)

EndWrite(IAsyncResult)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

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

FlushAsync()

Apaga assíncronamente todos os buffers deste fluxo e faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente.

(Herdado de Stream)
FlushAsync(CancellationToken)

Apaga assíncronamente todos os buffers deste fluxo Deflate, faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente e monitoriza pedidos de cancelamento.

FlushAsync(CancellationToken)

Apaga assíncronamente todos os buffers deste fluxo, faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente e monitoriza os pedidos de cancelamento.

(Herdado de Stream)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
ObjectInvariant()
Obsoleto.

Fornece suporte para um Contract.

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

Lê um número de bytes descomprimidos no array de bytes especificado.

Read(Span<Byte>)

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

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

O Deflate lê assíncronamente uma sequência de bytes do fluxo Deflate atual, escreve-os num array de bytes, avança a posição dentro do fluxo Deflate pelo número de bytes lidos e monitoriza pedidos de cancelamento.

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

A leitura 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 monitoriza pedidos de cancelamento.

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

A leitura 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(Memory<Byte>, CancellationToken)

O Deflate lê assíncronamente uma sequência de bytes do fluxo Deflate atual, escreve-os num intervalo de memória de bytes, avança a posição dentro do fluxo Deflate pelo número de bytes lidos e monitoriza pedidos de cancelamento.

ReadByte()

Lê um byte do fluxo Deflate e avança a posição dentro do stream em um byte, ou devolve -1 se estiver no final do fluxo Deflate.

ReadByte()

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

(Herdado de Stream)
Seek(Int64, SeekOrigin)

Esta operação não é suportada e lança sempre um NotSupportedException.

SetLength(Int64)

Esta operação não é suportada e lança sempre um NotSupportedException.

ToString()

Devolve uma cadeia que representa o objeto atual.

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

Escreve bytes comprimidos no fluxo subjacente a partir do array de bytes especificado.

Write(ReadOnlySpan<Byte>)

Escreve 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 escritos.

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

Escreve assíncronamente bytes comprimidos no fluxo Deflate subjacente a partir do array de bytes especificado.

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

Escreve assíncronamente uma sequência de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento.

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

Escreve assíncronamente uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes escritos.

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

Escreve assíncronamente bytes comprimidos no fluxo Deflate subjacente a partir da região de memória apenas leitura especificada.

WriteByte(Byte)

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

(Herdado de Stream)

Métodos da Extensão

Name Description
AsInputStream(Stream)

Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de entrada no Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de saída no Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado num fluxo de acesso aleatório.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura como aguarda nas tarefas devolvidas de um descartável assíncrono será realizada.

Aplica-se a

Ver também