7-Zip 是一款流行的文件归档和压缩工具,它使用自己的归档格式,称为 7z 格式。7z 格式由 Igor Pavlov 开发,旨在提供高压缩率、强加密和对多种压缩方法的支持。本技术说明将深入探讨 7z 归档格式的详细信息、其结构以及它采用的各种压缩和加密技术。
7z 格式是一个容器,它可以将多个文件和目录及其元数据存储在一个归档文件中。它支持固态压缩,这允许将多个文件一起压缩,从而获得更好的整体压缩率。该格式还包括头压缩、多线程以及将归档文件拆分为多个卷的能力等功能。
7z 归档的结构由三个主要部分组成:签名头、头和压缩数据块。签名头是一个 6 字节的序列,它将文件标识为 7z 归档文件。它总是以字节“7z\xBC\xAF\x27\x1C”开头。头紧随签名之后,它包含有关归档文件的基本信息,例如版本、文件数和使用的压缩方法。
头被分为几个子部分,包括归档属性、流信息和文件信息。归档属性存储有关归档文件的常规信息,例如文件数和创建时间。流信息包含有关压缩数据块的详细信息,例如它们的大小和使用的压缩方法。文件信息存储归档文件中每个文 件的元数据,包括文件名、大小和属性。
7z 格式的一个关键功能是对多种压缩方法的支持。7z 归档文件中使用最常见的压缩方法是 LZMA(Lempel-Ziv-Markov 链算法)和 LZMA2。LZMA 是一种高性能压缩算法,它提供出色的压缩率,尤其适用于文本和可执行文件。LZMA2 是 LZMA 的改进版本,它提供了更好的多线程支持和更快的解压缩速度。
除了 LZMA 和 LZMA2 之外,7z 格式还支持其他压缩方法,例如 BZip2、PPMd 和 Delta。BZip2 是一种通用压缩算法,它为各种文件类型提供良好的压缩率。PPMd 是一种统计压缩方法,它适用于文本文件,并且可以实现非常高的压缩率。Delta 压缩用于存储相似文件之间的差异,当存储同一文件的多个版本时,这可以显著减小归档文件的大小。
7z 格式还包括强大的加密功能,以保护归档文件的内容。它支持 AES-256 加密算法,该算法被认为是最安全的加密方法之一。当归档文件被加密时,所有文件名、元数据和压缩数据块都受到保护,这使得未经授权的用户几乎不可能在没有正确密码的情况下访问归档文件的内容。
为了确保数据完整性,7z 格式使用循环冗余校验 (CRC) 和 SHA-256 哈希值相结合。每个压缩数据块都有一个 CRC 值,它用于在解压缩期间检测和纠正错误。此外,归档文件头和文件元数据受 SHA-256 哈希值保护,这些哈希值可用于验证归档文件及其内容的完整性。
7z 格式还支持创建自解压归档文件 (SFX)。SFX 归档文件是一个可执行文件,它包括压缩数据和必要的解压代码。运行时,SFX 归档文件会自动将内容解压到指定的位置,而无需任何其他软件。此功能使得向可能未安装兼容解压工具的用户分发压缩文件变得容易。
7z 格式的一个优点是它的开放架构,它允许开发人员创建兼容的工具和库。7-Zip 软件本身是开源的,其源代码在 GNU 宽通用公共许可证 (LGPL) 下提供。这导致了各种第三方工具和插件的开发,这些工具和插件可以创建、解压和操作 7z 归档文件。
总之,7z 归档格式是一个强大且多功能的压缩容器,它提供高压缩率、强加密和对多种压缩方法的支持。它的高级功能,例如固态压缩、多线程和自解压归档文件,使其成为个人用户和企业环境的理想选择。随着该格式的不断发展和改进,它很可能会继续成为文件压缩和归档的热门选择。
檔案壓縮透過減少冗餘,讓相同的資訊佔用更少的位元。可壓縮的上限受資訊理論約束:對於無失真壓縮,上界是信源熵(參見香農的信源編碼定理以及他於 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。這些工具可以从壓縮格式中提取原始檔案。