BIN 檔案格式是一種簡單的二進位檔案格式,用於將檔案打包並壓縮到單一檔案中。它最初是由流行的 PKZip 壓縮工具的創建者 Phil Katz 在 1990 年代初期開發的。BIN 格式旨在提供一種更有效率且更快速的替代方案,以取代當時廣泛使用的 ZIP 格式。
BIN 檔案包含一系列檔案記錄,這些記錄串接在一起,然後在檔案的結尾處有一個中央目錄。每個檔案記錄都包含有關儲存檔案的元資料,例如其檔名、壓縮和未壓縮大小,以及用於完整性驗證的 CRC32 校驗和。實際的檔案資料儲存在檔案記錄標頭之後,並可以使用各種壓縮方法進行壓縮。
位於 BIN 檔案結尾處的中央目錄用作檔案中包含的所有檔案的索引。它包含每個檔案的記錄,包括個別檔案記錄中找到的相同元資料,以及檔案在檔案中的偏移量和長度。這允許快速查詢和隨機存取檔案,而無需掃描整個檔案。
BIN 格式的主要特點之一是它支援實體壓縮。使用實體壓縮,檔案中的所有檔案在壓縮期間都被視為一個連續的資料串流。這允許更好的壓縮比,因為壓縮器可以利用多個檔案中的相似性和冗餘。但是,實體壓縮也可能使從檔案中更新或提取個別檔案的效率降低,因為可能需要解壓縮並重新壓縮整個檔案。
BIN 格式支援多種壓縮方法,包括流行的 Deflate 演算法(也用於 ZIP 和 gzip),以及其他技術,例如 Bzip2 和 LZMA。這些壓縮方法在壓縮比和速度之間提供了不同的權衡。壓縮方法的選擇會極大地影響產生的 BIN 檔案的大小和效能。
在建立 BIN 檔案時,歸檔工具通常會個別壓縮每個檔案,並將其連同其元資料附加到檔案中。處理完所有檔案後,將產生中央目錄並寫入檔案的結尾處。一些 BIN 歸檔器也可能會套用其他預處理步驟,例如過濾重複檔案或對敏感資料套用加密。
若要從 BIN 檔案中提取檔案,歸檔工具會先讀取中央目錄以取得檔案清單及其元資料。然後,它會尋找檔案在檔案中的偏移量,讀取其壓縮資料,並使用指定的壓縮方法解壓縮它。提取的檔案通常會寫入磁碟,並保留其原始檔名和目錄結構。
BIN 格式還支援各種進階功能,例如多卷檔案、密碼保護和自解壓縮檔案。多卷檔案允許將大型檔案分割成較小、更易於管理的區塊。密碼保護透過加密檔案資料並要求輸入密碼才能提取,增加了額外的安全層。自解壓縮檔案將必要的提取工具與檔案本身捆綁在一起,允許收件者在不需要單獨的歸檔程式的情況下提取檔案。
儘管 BIN 格式具有效率和功能,但近年來它在很大程度上已被 ZIP 和 RAR 等更流行的檔案格式所取代。然而,它仍然用於某些特定應用程式和舊系統中,這些應用程式和系統重視其特定優點。
總之,BIN 檔案格式是一種二進位檔案格式,旨在有效壓縮和將多個檔案打包到單一檔案中。它支援實體壓縮、各種壓縮方法和進階功能,例如多卷檔案和加密。雖然今天不如其他一些檔案格式廣泛使用,但 BIN 格式在檔案壓縮的早期扮演了重要的角色,並在特定用例中仍然相關。
檔案壓縮透過減少冗餘,讓相同的資訊佔用更少的位元。可壓縮的上限受資訊理論約束:對於無失真壓縮,上界是信源熵(參見香農的信源編碼定理以及他於 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。這些工具可以从壓縮 格式中提取原始檔案。