Classe DeflateStream (System.IO.Compression)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe DeflateStream
Il presente articolo è stato tradotto manualmente. Per visualizzare questa pagina e contemporaneamente visualizzarne il contenuto in lingua inglese, passare alla visualizzazione semplificata.

Fornisce i metodi e le proprietà per la compressione e la decompressione di flussi mediante l'algoritmo Deflate.

Gerarchia di ereditarietà

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

Spazio dei nomi:  System.IO.Compression
Assembly:  System (in System.dll)
Sintassi

Visual Basic
Public Class DeflateStream _
	Inherits Stream
C#
public class DeflateStream : Stream
Visual C++
public ref class DeflateStream : public Stream
F#
type DeflateStream =  
    class
        inherit Stream
    end

Il tipo DeflateStream espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico Supportato da XNA Framework DeflateStream(Stream, CompressionMode) Inizializza una nuova istanza della classe DeflateStream utilizzando il flusso e il valore di CompressionMode specificati.
Metodo pubblico Supportato da XNA Framework DeflateStream(Stream, CompressionMode, Boolean) Inizializza una nuova istanza della classe DeflateStream utilizzando il flusso e il valore di CompressionMode specificati e un valore che indica se il flusso deve essere lasciato aperto.
In alto
Proprietà

  Nome Descrizione
Proprietà pubblica Supportato da XNA Framework BaseStream Ottiene un riferimento al flusso sottostante.
Proprietà pubblica Supportato da XNA Framework CanRead Ottiene un valore che indica se il flusso supporta la lettura durante la decompressione di un file. (Esegue l'override di Stream.CanRead).
Proprietà pubblica Supportato da XNA Framework CanSeek Ottiene un valore che indica se il flusso supporta la ricerca. (Esegue l'override di Stream.CanSeek).
Proprietà pubblica Supportato da XNA Framework CanTimeout Ottiene un valore che determina se il flusso corrente prevede il timeout. (Ereditato da Stream)
Proprietà pubblica Supportato da XNA Framework CanWrite Ottiene un valore che indica se il flusso supporta la scrittura. (Esegue l'override di Stream.CanWrite).
Proprietà pubblica Supportato da XNA Framework Length Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Length).
Proprietà pubblica Supportato da XNA Framework Position Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Position).
Proprietà pubblica Supportato da XNA Framework ReadTimeout Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout. (Ereditato da Stream)
Proprietà pubblica Supportato da XNA Framework WriteTimeout Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout. (Ereditato da Stream)
In alto
Metodi

  Nome Descrizione
Metodo pubblico Supportato da XNA Framework BeginRead Inizia un'operazione di lettura asincrona. (Esegue l'override di Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)).
Metodo pubblico Supportato da XNA Framework BeginWrite Inizia un'operazione di scrittura asincrona. (Esegue l'override di Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)).
Metodo pubblico Supportato da XNA Framework Close Chiude il flusso corrente e rende disponibili risorse, come socket e handle di file, a esso associate. (Ereditato da Stream)
Metodo pubblico CopyTo(Stream) Legge i byte dal flusso corrente e li scrive nel flusso di destinazione. (Ereditato da Stream)
Metodo pubblico CopyTo(Stream, Int32) Legge tutti i byte dal flusso corrente e li scrive in un flusso di destinazione, utilizzando una dimensione di buffer specificata. (Ereditato da Stream)
Metodo pubblico CreateObjRef Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto. (Ereditato da MarshalByRefObject)
Metodo protetto Supportato da XNA Framework CreateWaitHandle Obsoleta. Assegna un oggetto WaitHandle. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Dispose() Rilascia tutte le risorse utilizzate dalla classe Stream. (Ereditato da Stream)
Metodo protetto Supportato da XNA Framework Dispose(Boolean) Rilascia le risorse non gestite utilizzate da DeflateStream e facoltativamente rilascia le risorse gestite. (Esegue l'override di Stream.Dispose(Boolean)).
Metodo pubblico Supportato da XNA Framework EndRead Attende il completamento della lettura asincrona in sospeso. (Esegue l'override di Stream.EndRead(IAsyncResult)).
Metodo pubblico Supportato da XNA Framework EndWrite Termina un'operazione di scrittura asincrona. (Esegue l'override di Stream.EndWrite(IAsyncResult)).
Metodo pubblico Supportato da XNA Framework Equals(Object) Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protetto Supportato da XNA Framework Finalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblico Supportato da XNA Framework Flush Svuota il contenuto del buffer interno dell'oggetto flusso corrente nel flusso sottostante. (Esegue l'override di Stream.Flush()).
Metodo pubblico Supportato da XNA Framework GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico GetLifetimeService Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza. (Ereditato da MarshalByRefObject)
Metodo pubblico Supportato da XNA Framework GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico InitializeLifetimeService Consente di ottenere un oggetto servizio di durata per il controllo dei criteri di durata per l'istanza. (Ereditato da MarshalByRefObject)
Metodo protetto Supportato da XNA Framework MemberwiseClone() Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo protetto MemberwiseClone(Boolean) Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject)
Metodo protetto ObjectInvariant Infrastruttura. Fornisce supporto per un Contract. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Read Legge un numero di byte decompressi nella matrice di byte specificata. (Esegue l'override di Stream.Read(Byte[], Int32, Int32)).
Metodo pubblico Supportato da XNA Framework ReadByte Legge un byte dal flusso e sposta in avanti la posizione corrente all'interno del flusso di un byte o restituisce -1 se si trova alla fine del flusso. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Seek Questa operazione non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Seek(Int64, SeekOrigin)).
Metodo pubblico Supportato da XNA Framework SetLength Questa operazione non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.SetLength(Int64)).
Metodo pubblico Supportato da XNA Framework ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico Supportato da XNA Framework Write Scrive i byte compressi nel flusso sottostante dalla matrice di byte specificata. (Esegue l'override di Stream.Write(Byte[], Int32, Int32)).
Metodo pubblico Supportato da XNA Framework WriteByte Scrive un byte nella posizione corrente del flusso e sposta in avanti di un byte la posizione del flusso. (Ereditato da Stream)
In alto
Note

Questa classe rappresenta l'algoritmo Deflate, un algoritmo standard per la compressione e la decompressione di file senza perdita di dati, che utilizza una combinazione dell'algoritmo LZ77 e della codifica Huffman. I dati possono essere prodotti o utilizzati, anche per un flusso di dati di input sequenziali di lunghezza arbitraria, utilizzando solo la quantità di spazio di archiviazione intermedio associata in precedenza. È possibile implementare il formato immediatamente in modo non previsto nei brevetti. Per ulteriori informazioni, vedere il documento RFC 1951. DEFLATE Compressed Data Format Specification version 1.3" (la pagina potrebbe essere in inglese).

Questa classe non fornisce di per sé la funzionalità per l'aggiunta di file o l'estrazione di file dagli archivi zip.

La classe GZipStream utilizza il formato dati gzip che include un valore del controllo di ridondanza ciclico per rilevare il danneggiamento dei dati. Il formato dati gzip utilizza lo stesso algoritmo di compressione della classe DeflateStream.

La funzionalità di compressione di DeflateStream e GZipStream viene esposta come flusso. I dati vengono letti byte per byte, pertanto non è possibile eseguire più passaggi per determinare il modo ottimale per comprimere file interi o blocchi estesi di dati. È consigliabile utilizzare le classi DeflateStream e GZipStream su origini non compresse di dati. Se i dati di origine sono già compressi, l'utilizzo di queste classi può comportare un aumento della dimensione del flusso.

Esempi

Nell'esempio seguente viene illustrato come utilizzare la classe DeflateStream per comprimere e decomprimere una directory di file.

Visual Basic

Imports System.IO
Imports System.IO.Compression
Module Module1

    Sub Main()
        ' Path to directory of files to compress.
        Dim dirpath As String = "c:\users\pubic\reports"

        Dim di As DirectoryInfo = New DirectoryInfo(dirpath)

        ' Compress the directory's files.
        For Each fi As FileInfo In di.GetFiles()
            Compress(fi)
        Next

        ' Decompress all *.cmp files in the directory.
        For Each fi As FileInfo In di.GetFiles("*.cmp")
            Decompress(fi)
        Next

    End Sub

    ' Method to compress.
    Private Sub Compress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Compressing:
            ' Prevent compressing hidden and already compressed files.

            If (File.GetAttributes(fi.FullName) And FileAttributes.Hidden) _
                <> FileAttributes.Hidden And fi.Extension <> ".cmp" Then
                ' Create the compressed file.
                Using outFile As FileStream = File.Create(fi.FullName + ".cmp")
                    Using Compress As DeflateStream = New DeflateStream(outFile, _
                                                        CompressionMode.Compress)
                        ' Copy the source file into the compression stream.
                        inFile.CopyTo(Compress)

                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.", _
                          fi.Name, fi.Length.ToString(), outFile.Length.ToString())

                    End Using
                End Using
            End If
        End Using
    End Sub

    ' Method to decompress.
    Private Sub Decompress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Get orignial file extension, for example "doc" from report.doc.cmp.
            Dim curFile As String = fi.FullName
            Dim origName = curFile.Remove(curFile.Length - fi.Extension.Length)

            ' Create the decompressed file.
            Using outFile As FileStream = File.Create(origName)
                Using Decompress As DeflateStream = New DeflateStream(inFile, _
                                                        CompressionMode.Decompress)

            		' Copy the decompression stream into the output file.
            		Decompress.CopyTo(outFile)
            		
                    Console.WriteLine("Decompressed: {0}", fi.Name)

                End Using
            End Using
        End Using
    End Sub
End Module


C#

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

public class Program
{

    public static void Main()
    {
        // Path to directory of files to compress and decompress.
        string dirpath = @"c:\users\public\reports";

        DirectoryInfo di = new DirectoryInfo(dirpath);

        // Compress the directory's files.
        foreach (FileInfo fi in di.GetFiles())
        {
            Compress(fi);
    	}

        // Decompress all *.cmp files in the directory.
        foreach (FileInfo fi in di.GetFiles("*.cmp"))
        {
    		Decompress(fi);
        }


    }

    public static void Compress(FileInfo fi)
    {
        // Get the stream of the source file.
        using (FileStream inFile = fi.OpenRead())
        {
            // Prevent compressing hidden and already compressed files.
            if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden)
                != FileAttributes.Hidden & fi.Extension != ".cmp")
            {
                // Create the compressed file.
                using (FileStream outFile = 
                        File.Create(fi.FullName + ".cmp"))
                {
                    using (DeflateStream Compress = 
                        new DeflateStream(outFile, 
                        CompressionMode.Compress))
                    {
                        // Copy the source file into 
                        // the compression stream.
                        inFile.CopyTo(Compress);

                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                        fi.Name, fi.Length.ToString(), outFile.Length.ToString());
                    }
                }
            }
        }
    }

    public static void Decompress(FileInfo fi)
    {
        // Get the stream of the source file.
        using (FileStream inFile = fi.OpenRead())
        {
        	// Get original file extension, 
            // for example "doc" from report.doc.cmp.
        	string curFile = fi.FullName;
        	string origName = curFile.Remove(curFile.Length 
                    - fi.Extension.Length);

        	//Create the decompressed file.
        	using (FileStream outFile = File.Create(origName))
        	{
        	    using (DeflateStream Decompress = new DeflateStream(inFile,
        		    CompressionMode.Decompress))
        	    {
                        // Copy the decompression stream 
                        // into the output file.
            		    Decompress.CopyTo(outFile);
            		
            		Console.WriteLine("Decompressed: {0}", fi.Name);
        	    }
        	}
        }
    }
}


Informazioni sulla versione

.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1
Piattaforme

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Vedere anche

Riferimenti