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

GZipStream 類別

 

提供用於壓縮和解壓縮資料流的方法和屬性。

命名空間:   System.IO.Compression
組件:  System (於 System.dll)

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.Compression.GZipStream

public class GZipStream : Stream

名稱描述
System_CAPS_pubmethodGZipStream(Stream, CompressionLevel)

使用指定的資料流和壓縮層級,初始化 GZipStream 類別的新執行個體。

System_CAPS_pubmethodGZipStream(Stream, CompressionLevel, Boolean)

使用指定的資料流和壓縮層級,初始化 GZipStream 類別的新執行個體,並選擇性地保持開啟資料流。

System_CAPS_pubmethodGZipStream(Stream, CompressionMode)

使用指定的資料流和壓縮模式,初始化 GZipStream 類別的新執行個體。

System_CAPS_pubmethodGZipStream(Stream, CompressionMode, Boolean)

使用指定的資料流和壓縮模式,初始化 GZipStream 類別的新執行個體,並選擇性地保持開啟資料流。

名稱描述
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)

開始非同步的讀取作業。 (請考慮改用 Stream.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)

釋放 GZipStream 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。(覆寫 Stream.Dispose(Boolean)。)

System_CAPS_pubmethodEndRead(IAsyncResult)

等候暫止的非同步讀取完成。 (請考慮改用 Stream.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。)

此類別代表使用業界標準演算法不失真檔案壓縮和解壓縮 gzip 資料格式。 該格式包含用於偵測資料損毀的循環冗餘檢查值。 Gzip 資料格式會使用相同的演算法為 DeflateStream 類別,但可以擴充來使用其他壓縮格式。 格式可以很輕易地實作專利不涵蓋的方式。

從開始 .NET Framework 4.5, 、 DeflateStream 類別使用 zlib 程式庫進行壓縮。 如此一來,它提供更好的壓縮演算法和大部分的情況下,比它較小的壓縮的檔提供在舊版的.NET Framework。

壓縮 GZipStream .gz 副檔名的檔案寫入的物件可以使用許多常見的壓縮工具解壓縮; 不過,這個類別不原本就提供新增檔案或從 zip 封存中解壓縮檔案的功能。

中的壓縮功能 DeflateStreamGZipStream 公開為資料流。 資料會讀取位元組的基礎,因此無法執行好幾個階段來決定壓縮所有檔案或大型資料區塊的最佳方法。 DeflateStreamGZipStream 類別最適合使用未壓縮的資料來源上。 如果已經壓縮的來源資料,使用這些類別可能會增加資料流的大小。

繼承者注意事項︰

當您繼承自 GZipStream, ,您必須覆寫下列成員︰ CanSeek, ,CanWrite, ,和 CanRead

下列範例示範如何使用 GZipStream 類別來壓縮和解壓縮檔案的目錄。

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

namespace zip
{
    public class Program
    {
        private static string directoryPath = @"c:\temp";
        public static void Main()
        {
            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
            Compress(directorySelected);

            foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
            {
                Decompress(fileToDecompress);
            }
        }

        public static void Compress(DirectoryInfo directorySelected)
        {
            foreach (FileInfo fileToCompress in directorySelected.GetFiles())
            {
                using (FileStream originalFileStream = fileToCompress.OpenRead())
                {
                    if ((File.GetAttributes(fileToCompress.FullName) & 
                       FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                    {
                        using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                        {
                            using (GZipStream compressionStream = new GZipStream(compressedFileStream, 
                               CompressionMode.Compress))
                            {
                                originalFileStream.CopyTo(compressionStream);

                            }
                        }
                        FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");
                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                        fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString());
                    }

                }
            }
        }

        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 (GZipStream decompressionStream = new GZipStream(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 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: