GZIP 存檔格式

GZIP 是一種流行的檔案格式和用於檔案壓縮和解壓縮的軟體應用程式。它是由 Jean-Loup Gailly 和 Mark Adler 在 20 世紀 90 年代初開發的免費開源壓縮演算法。名稱「GZIP」代表 GNU ZIP,表示它與 GNU 專案的關聯。
GZIP 壓縮的工作原理是減小檔案的大小,使它們更容易透過網路傳輸或儲存在磁碟上。它透過用引用替換重複的資料字串來實現壓縮,從而減少冗餘和整體檔案大小。 GZIP 對於壓縮基於文字的檔案(例如 HTML、CSS、JavaScript、XML 和 JSON)特別有效,但它也可用於壓縮其他類型的檔案。

關於 GZIP 存檔訊息

GZIP 存檔資訊是指使用 GZIP 壓縮演算法壓縮的檔案中所包含的元資料和資料。 GZIP 檔案通常包括檔案屬性、時間戳記、壓縮方法以及解壓縮和檔案復原所需的其他相關資料等資訊。此元資料對於正確識別和處理壓縮檔案至關重要。
此外,GZIP 存檔資訊還可能包括有關壓縮過程本身的詳細信息,例如壓縮等級、校驗和以及壓縮期間使用的任何其他標誌或選項。此資訊對於確保解壓縮時壓縮資料的完整性和正確性至關重要。總的來說,了解 GZIP 存檔資訊對於有效管理和使用壓縮檔案至關重要,無論是用於資料儲存、網路傳輸還是存檔目的。

GZIP 存檔格式的演變

GZIP 存檔格式起源於 20 世紀 80 年代末,當時 Jean-loup Gailly 和 Mark Adler 開發了 GZIP 壓縮演算法,作為 GNU 計畫的一部分。 GZIP 代表 GNU ZIP,反映了它起源於 GNU 專案。目標是創建一種壓縮工具,可以有效地減小檔案的大小,同時保持不同電腦系統之間的相容性。
Jean-loup Gailly 和 Mark Adler 開發了該程序,作為早期 Unix 系統中壓縮實用程式的免費替代品。它被設計為 GNU 項目的一部分,因此 gzip 中的“g”。最初的版本 0.1 於 1992 年 10 月 31 日向公眾發布,隨後於 1993 年 2 月發布了 1.0 版。

GZIP結構

GZIP 使用 DEFLATE 演算法,該演算法融合了 LZ77 和 Huffman 編碼技術。 DEFLATE 的開發是為了取代 LZW 和其他受專利限制的壓縮演算法,這些演算法限制了當時流行的壓縮和類似歸檔實用程式的有效性。 GZIP 檔案格式遵循明確定義的結構,由三個主要部分組成:

  • 標頭(10 位元組): 本部分提供有關存檔及其內容的基本資訊。這是標題資料的細分
  • 幻數(4 位元組): 這將檔案標識為 GZIP 存檔。它具有解壓縮工具可識別的特定十六進位值 (1f 8b)。
  • 壓縮方法(1 個位元組): 此位元組通常會儲存值 8,表示 GZIP 使用的 DEFLATE 壓縮演算法。
  • 標頭標誌(1 個位元組): 這些標誌控制解壓縮的特定方面,例如檔案名稱編碼或註釋的存在。
  • 建立時間(4 位元組): 此部分儲存指示存檔建立時間的 Unix 時間戳記。
  • CRC-32(4 位元組): 此循環冗餘校驗值用於解壓縮期間的錯誤偵測。它是根據未壓縮的數據計算的,並允許解壓縮軟體驗證提取檔案的完整性。

這種格式的好處

  • 無損壓縮: GZIP 壓縮資料而不會遺失任何資訊。與某些壓縮技術不同,解壓縮後可以完美重建原始檔案。這對於維護資料完整性至關重要的重要文件、影像或程式碼至關重要。
  • 廣泛相容性: GZIP 最大的優勢之一是其廣泛採用。大多數作業系統、存檔實用程式(WinRAR、7-Zip)和 Web 伺服器都支援它。這可確保您可以在各種平台上輕鬆開啟 GZIP 文件,而無需特定軟體。此外,GZIP 也廣泛支援各種作業系統,包括基於 Unix 的系統、Linux、Windows 和 macOS。這種跨平台相容性確保可以在不同環境中無縫建立和解壓縮 GZIP 壓縮檔案。
  • 串流壓縮: GZIP 支援串流壓縮,允許即時壓縮或解壓縮文件,而無需等待整個文件被處理。這使得它適用於不斷產生或傳輸資料的場景,例如網路通訊和資料備份操作。
  • 開放標準: GZIP 是一種開放且廣泛採用的文件壓縮標準,其規範公開可用。這種開放性促進了不同軟體應用程式和系統之間的互通性和相容性,從而培育了一個充滿活力的工具和庫生態系統,用於處理 GZIP 壓縮檔案。使用 GZIP 通常很簡單。許多工具和軟體會自動壓縮或解壓縮這種格式的檔案。此外,解壓縮過程非常有效率且需要最少的資源。

GZIP 存檔支援的操作

Aspose.ZIP 允許使用者提取特定條目或整個存檔。對於 Aspose.ZIP for .NET 您可以使用 GzipArchiveClass 打開 .gz 文件,然後迭代其條目,將它們提取到所需位置。對於 Aspose.ZIP for Java 類似的方法使用 GzipArchive 開啟 .gz 檔案並提取條目。

GZIP 檔案 - 內部結構

GZIP 檔案就像是包裝整齊的包裹。它以 10 位元組的標頭開始,介紹格式和壓縮方法。核心在於壓縮資料部分,使用巧妙的演算法進行縮小。最後,8 位元組頁腳透過校驗和驗證資料完整性,確保您的檔案在解壓縮後安全到達。

GZIP 檔案 - 內部結構

內部檔案結構

  • 檔案元資料 - 與 tar 檔案類似,每個檔案都儲存修改時間和權限等基本資訊。但是,此部分很靈活,允許根據您的需求省略或包含其他詳細信息,例如存取控制清單 (ACL) 或擴充屬性 (EA)。建議為常規檔案包含強大的雜湊函數(如 SHA1)以確保資料完整性。
  • 多個內容流 - 與傳統存檔不同,檔案的內部資料檔案內可以有多個資料流。這對於儲存與檔案關聯的擴充屬性或資源分支非常有用。
  • 標頭 - 內部索引檔案保存檔案標頭,鏡像那些分散在內部資料檔案中的標頭。但是,當單獨儲存時,索引標頭必須引用資料檔案中對應資料的起始位置。此外,索引中的目錄條目列出了它們所包含的檔案以及它們在內部檔案索引中的相應偏移量。
  • 重複元資料的基本原理 - 這種設計選擇確保了高效的資料流/解碼和隨機檔案存取。此外,元資料壓縮良好,從而將儲存開銷降至最低。測試顯示元資料通常佔用不到 0.3% 的儲存空間,因此這種權衡是值得的。
  • 區塊頭 - 區塊頭與外部檔案類似,包含區塊大小資訊和唯一識別碼序列。

使用 GZIP 的範例

Aspose.ZIP API 允許在您的應用程式中提取檔案,而不需要任何其他第三方應用程式。 Aspose.ZIP API 提供 GzipArchive 類別來處理 GZIP 檔案。

GZIP with compress only single source via C#

Such archives like GZIP, LZ, BZIP2, XZ, Z do not support entries and can compress only single source. See samples with such a compression.

    using (FileStream source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (GzipArchive archive = new GzipArchive())
        {
            archive.SetSource(source);
            archive.Save(«archive.gz);
        }
    }

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

有關 GZIP 檔案的其他信息

人們一直在問

1. 什麼是GZIP?

GZIP(GNU 壓縮檔案)是一種流行的檔案格式,它可以縮小檔案的大小,以便於儲存和傳輸。

2. GZIP 壓縮與 ZIP 等其他格式相比如何?

與 ZIP 相比,GZIP 通常提供更高的壓縮比,尤其是在壓縮基於文字的檔案時。但是, ZIP 檔案通常包含對多個檔案和目錄的支持,這使得它們在將多個文件打包在一起時更加通用。

3. GZIP 可以將多個檔案壓縮到一個檔案中嗎?

GZIP 旨在壓縮單一文件,而不是多個文件或目錄。但是,通常將 tar 等工具與 GZIP 結合使用來創建 tarball tar 檔案 ,然後使用GZIP 對其進行壓縮以建立單一壓縮檔。