7z 是 1999 年为 7-Zip 这个程序建立的归档格式。它做的是和 ZIP 一样的两件事——打包文件和压缩它们——而且压缩这件事做得好相当多,理由值得理解,因为它们伴随着取舍。
更好的压缩。7z 用 LZMA2,而不是 ZIP 那个老得多的 DEFLATE。在可压缩的内容上——文本、代码、日志、数据库——差距通常是比同一批文件的 ZIP 小 30% 到 50%。
固实归档(solid archive)。这是有趣的那一个,下面会讲。
真正的加密,连文件名一起。7z 用 AES-256 加密,而且可以连文件列表一起加密。第二点很要紧:一个有密码的 ZIP 通常让里面所有东西的名字不用密码就读得到,所以任何拿到那个归档的人都看得到里面有 薪资检讨-2026.xlsx。7z 可以把那个也藏起来。
ZIP 把每个文件独立压缩。一千个文件就是一千次分开的压缩工作,而从其中一个学到的东西完全不会用在下一个上。
7z 可以改成把整组当成一条连续的流,一次压完。那些出现在文件之间的重复于是被找出来并移除,而不只是每个文件内部的重复。
在一组彼此相似的文件上,效果非常惊人。一个装着一千张共用同一套模板的发票的文件夹、一个塞满源代码的项目、一年份的每日日志——那些文件彼此几乎一样,而固实归档把那些共用材料收折一次,而不是一千次。在那类内容上,看到一个固实 7z 只有对应 ZIP 的零头是很常见的。
在一个装照片或视频的文件夹上它什么都改变不了,因为那些文件已经被压缩过,彼此之间没有字节层级的重复。这就带到 7z 原封不动继承下来的那个限制。
算法再好,已经被压缩过的数据不会再被压缩。JPEG、PNG、MP4、MP3、PDF 和 Office 文档在被创建的当下就已经压缩过了,而 7z 在它们身上找到的重复,不会比 ZIP 多。
所以 7z 的收获在类文本数据上是真的,在媒体上基本上是零。如果你在归档照片而目标是一个更小的文件,格式不是那个杠杆——那些图像才是。
“把所有东西当成一条流”带来的压缩有两个后果,两个都是真实的。
抽单一文件很慢。要拿到固实块中间的一个文件,软件必须把它前面的所有东西都解压缩。从一个大的固实归档里抽一份文档出来,可能和解开整包一样久。
损坏会扩散。在 ZIP 里,一个坏掉的文件就是一个坏掉的文件;它的邻居不受影响,因为每一个都是分开压的。在一个固实块里,中途的损坏可能让那个点之后的所有东西都救不回来。
第二点是做备份时要权衡的那一个。如果一个归档要在硬盘上放好几年、或者要经过不可靠的连接传送,独立压缩的韧性可能比省下的那几 MB 更值钱。7-Zip 让你限制固实块大小作为折衷——整组会被分段压缩,所以损坏被局限在一段之内,而大部分好处还在。
这个因素做决定的次数,比压缩率还多。
Windows 和 macOS 都能在没装任何软件的情况下打开 ZIP 文件。两个都不能原生打开 7z。把一个 7z 寄给同事、客户或客服,意味着寄给他们一个他们可能用不了的文件,而回信会是一句“可以给我 ZIP 吗”。
所以分界很直接:
LZMA2 比 DEFLATE 慢,在较高的设置下明显慢,而且压缩时用的内存多出不少。解压缩相对来说很快。
那个不对称很适合归档:你在创建归档时付一次代价,而之后每一次读取的成本都很小。它对例行、重复的压缩就适合得多了。