PAX(打包檔案格式)是一種用於封存和壓縮檔案和目錄的檔案格式。它最初由 Google 開發,並基於 ZIP 和 tar 格式的技術組合。PAX 旨在提供高效的壓縮、快速的檔案隨機存取,以及自訂元資料的可擴充性。
在核心部分,PAX 封存包含一個中央目錄,其中包含封存檔案的元資料,接著是壓縮的檔案資料本身。中央目錄總是位於封存的結尾,以便快速存取,而不需要掃描整個檔案。
中央目錄中的每個檔案項目包含資訊,例如檔案路徑、大小、時間戳記、CRC32 校驗和,以及使用的壓縮方法。檔案路徑儲存為 Unicode 字串,允許支援非 ASCII 檔名。PAX 使用 UTF-8 編碼作為檔案路徑。
對於壓縮,PAX 支援多種演算法,包括 DEFLATE、Brotli 和 Zstandard (zstd)。DEFLATE 是預設方法,這是 ZIP 和 gzip 中使用的相同演算法。它在壓縮比和速度之間取得良好的平衡。Brotli 和 Zstandard 是較新的演算法,可以提供更好的壓縮比,特別是對於某些類型的資料,例如文字檔案,但代價是壓縮和解壓縮速度較慢。
PAX 中的壓縮檔案資料儲存在區塊中,每個區塊的最大未壓縮大小為 1 MB。這種分塊儲存可實現對檔案的有效隨機存取,因為只需要找到並解壓縮必要的區塊即可提取特定檔案,而不是處理整個封存。
PAX 的主要功能之一是支援實體壓縮。使用實體壓縮時,封存會被視為單一的連續資料串流,而不是單獨檔案的集合。這允許壓縮器在檔案邊界中找到重複和模式,可能會產生更高的壓縮比。但是,實體壓縮會影響快速存取個別檔案的能力,因為可能需要解壓縮整個封存,直到所需的檔案。
PAX 還包括完整性檢查,以偵測資料損毀。中央目錄中的每個檔案項目都包含未壓縮檔案資料的 CRC32 校驗和。在提取檔案時,PAX 會計算解壓縮資料的校驗和,並將其與儲存的校驗和進行比較,以驗證完整性。此外,PAX 封存可以包含一個選用的數位簽章,以提供驗證和竄改偵測。
為了提升效能,PAX 支援多執行緒壓縮和解壓縮。檔案可以並行壓縮並寫入封存,利用多個 CPU 核心。同樣地,在提取期間,可以同時解壓縮多個檔案。這種並行處理可以在多核心系統上顯著加速封存和提取作業。
PAX 封存也可以儲存標準檔案屬性之外的額外元資料。可以使用鍵值對將自訂元資料指定給檔案和目錄。此元資料與檔案項目一起儲存在中央目錄中。自訂元資料的範例包括作者資訊、檔案類別或應用程式特定的資料。
串流支援是 PAX 的另一項功能。封存可以在串流方式中建立和提取,而不需要將整個封存載入記憶體中。這在處理大型封存或使用有限記憶體資源時特別有用。串流允許在即時建立封存,或在透過網路連線接收資料時處理封存。
為了向後相容性和互通性,PAX 封存可以包含一個備用 ZIP 封存。ZIP 封存附加在 PAX 封存的結尾,並以傳統 ZIP 格式包含相同的檔案。這允許不支援 PAX 的舊工具仍然可以從封 存的 ZIP 部分提取檔案。
PAX 因其效率、靈活性,以及開源實作而獲得普及。它受到不同平台上各種封存工具和函式庫的支援。稱為 libpax 的參考實作是用 C 編寫的,並提供一個低階 API,用於建立和提取 PAX 封存。
PAX 的限制之一是它不原生支援加密。但是,可以透過將 PAX 與其他加密技術結合,或使用建立在 PAX 格式上的第三方工具來實現加密。
總之,PAX(打包檔案格式)是一種多功能且高效的檔案封存格式,提供快速隨機存取、實體壓縮、並行處理、自訂元資料和串流支援等功能。它結合了壓縮演算法、分塊儲存和可擴充性,使其成為封存和分發檔案的絕佳選擇。
檔案壓縮透過減少冗餘,讓相同的資訊佔用更少的位元。可壓縮的上限受資訊理論約束:對於無失真壓縮,上界是信源熵(參見香農的信源編碼定理以及他於 1948 年發表的《通信的數學理論》)。對於有失真壓縮,碼率與感知品質之間的權衡由率失真理論描述。
多數壓縮器分兩個階段。首先,模型會預測或揭露資料中的結構。接著,編碼器把這些預測轉成近乎最優的位元型態。經典的建模家族是 Lempel–Ziv:LZ77 (1977)及 LZ78 (1978) 會偵測重複子字串並輸出參照而非原始位元組。編碼面則由霍夫曼編碼(見原始論文1952)為較常出現的符號分配更短的碼字。算術編碼與範圍編碼再進一步逼近熵極限,而現代的非對稱數值系統(ANS)則用查表方式取得相似壓縮率。
DEFLATE(被 gzip、zlib 與 ZIP 採用)把 LZ77 和霍夫曼編碼結合。其規格完全公開:DEFLATERFC 1951、zlib 封裝RFC 1950以及 gzip 檔案格式RFC 1952。Gzip 針對串流設計並明確不提供隨機存取。PNG 影像則把 DEFLATE 規範為唯一的壓縮方式(視窗最多 32 KiB),詳見 PNG 規格「Compression method 0… deflate/inflate… at most 32768 bytes」與W3C/ISO PNG 第二版。
Zstandard (zstd): 針對高壓縮率與極快解壓而設計的通用壓縮器 。格式記載於RFC 8878(以及HTML 鏡像)和 GitHub 上的參考規格文件。與 gzip 類似,基本框架並不追求隨機存取。zstd 的絕招是字典:從語料擷取的小樣本能大幅改善許多小型或相似檔案的壓縮(參閱python-zstandard 字典文件與Nigel Tao 的示例)。各實作同時支援「非結構化」與「結構化」字典(討論)。
Brotli: 為網頁內容(如 WOFF2 字體、HTTP)優化,結合靜態字典與類 DEFLATE 的 LZ+熵編碼核心。規格載於RFC 7932,文件同時指出滑動視窗為 2WBITS-16,WBITS 介於 [10, 24](1 KiB-16 B 至 16 MiB-16 B),並且不嘗試隨機存取。Brotli 常在網頁文字上優於 gzip,解碼也相當快速。
ZIP 容器: ZIP 是一種檔案封存格式,可存放使用多種壓縮法(deflate、store、zstd 等)的項目。權威規格是 PKWARE 的 APPNOTE(參見APPNOTE 入口、托管副本以及美國國會圖書館的概覽ZIP File Format (PKWARE)/ZIP 6.3.3)。
檔案壓縮是一個減少檔案或檔案群大小的過程,通常用於節省儲存空間或加速網路傳輸。
檔案壓縮運作原理,透過識別並移除數據中的冗餘資訊。它使用演算法將原始數據編碼在較小的空間裡。
兩種主要的檔案壓縮類型是無失真及有失真壓縮。無失真壓縮可以完美地恢復原始檔案,然而有失真壓縮在一些資料品質的損失下能得到更大的壓縮程度。
一個常見的檔案壓縮工具範例是WinZip,它支援多種壓縮格式包括ZIP與RAR。
在無失真壓縮中,質量保持不變。然而,在有失真壓縮中,可能會有顯著的質量下降,因為它刪除了一些較不重要的數據以便更大程度地減少檔案大小。
是的,相對於資料的完整性來說,檔案壓縮是安全的,尤其是無失真壓縮。然而,如同所有檔案,被壓縮的檔案也可能受到惡意軟體或病毒的攻擊,所以總是需要有專業的安全軟體以保護。
幾乎所有種類的檔案都可以被壓縮,包括文字檔案、圖像、音訊、視頻和軟體檔案。然而,壓縮程度可以因檔案類型而有顯著的不同。
ZIP檔是一種使用無失真壓縮以減少一個或多個檔案大小的檔案格式。在ZIP檔中的多個檔案被有效地打包為單一的檔案,這也讓分享變得更加容易。
技術上可行,儘管額外的大小減少可能非常小或甚至適得其反。壓縮一個已經壓縮過的檔案有時可能會增加其大小,原因在於壓縮演算法所增加的metadata。
解壓壓縮的檔案,通常需要一個解壓縮或解zip的工具,像是WinZip或7-Zip。這些工具可以从壓縮格式中提取原始檔案。