本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

DeflateStream 類別

 

提供方法和屬性,以透過 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)

建立物件,包含要產生 proxy 用來與遠端物件通訊所需的所有相關資訊。(繼承自 MarshalByRefObject。)

System_CAPS_protmethodCreateWaitHandle()

已淘汰。配置 WaitHandle 物件。(繼承自 Stream。)

System_CAPS_pubmethodDispose()

釋放 Stream 所使用的所有資源。(繼承自 Stream。)

System_CAPS_protmethodDispose(Boolean)

釋放 DeflateStream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。(覆寫 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 起供應

此類型的任何 public static (在 Visual Basic 中 共用 在 Visual Basic 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: