在比较三种格式之前,有一件更有用的事要先讲清楚——因为它决定了这个比较对你有没有意义。
JPG、PNG、PDF、MP4、MP3、DOCX、XLSX 都是已经压缩过的。压缩的原理是找出重复然后用更短的方式编码;那些格式早就把重复拿掉了。对结果再跑一次压缩器,几乎找不到还能挤的东西。
把二十张照片放进 ZIP,压缩包大概只比原文件小 1–2%。有时候还更大,因为压缩包本身要加自己的结构。一整个文件夹的 PDF 也一样,视频更是——那是大多数人手上压得最狠的东西。
这件事要紧,是因为“压一下发邮件”正是大家拿出压缩软件最常见的理由——而偏偏对那些文件,它是唯一没用的做法。一个 40 MB 的 PDF 发不出去,压成 ZIP 会得到一个 39 MB 的 ZIP。**把 PDF 本身压缩**——把里面的图片用合理的分辨率重新编码——会得到一个 4 MB 的 PDF。那是不同的操作,结果也不同。
压缩包真正能瘦的是文本:源代码、CSV、日志、XML、BMP 和 TIFF 这类未压缩的图、数据库。一个文件夹的 CSV 可以掉 80–90%。如果你手上是那种,继续往下看。
ZIP 从 1989 年就有了,而且内置在 Windows、macOS、Linux、iOS、Android 里。没有人需要安装任何东西,而这一件事的分量超过大多数技术考量。
它的压缩率是三者中最弱的,在大量文件时差距明显。它把每个文件独立压缩——这会牺牲压缩率,但有个真实的好处:你可以不处理整个压缩包就取出其中一个,而且一个损坏的 ZIP 通常还能救回坏掉之前的文件。
加密要小心。ZIP 支持两种机制:原始的 ZipCrypto,密码学上已被破解,应该当成完全没有保护;以及 AES-256,这个是可靠的,但不是每个工具默认都用它。如果你要加密 ZIP,要确认你拿到的是哪一种。
还有一个限制:ZIP 加密的是文件内容,但文件名仍然看得见。拿到压缩包的人不需要密码就知道里面有什么。
7z 是开放、免费的,而且压得比另外两个都狠——可压缩的内容上通常比 ZIP 小 20–40%,大量相似文件时更多。
差距来自两件事。它用 LZMA2,一个较现代、搜索窗口大得多的算法。还有它支持固实压缩:不是把每个文件分开压,而是把整组当成一条连续的数据流,所以**文件之间**的重复也被压掉了。一个装着一千个相似 HTML 的文件夹,得益极大。
固实压缩有代价,而且刚好是 ZIP 那个优点的镜像:要取出一个文件,压缩器必须把它前面的全部处理过一遍。压缩包大的时候很慢,而且前段损坏会让后面全部报废。
它的加密是 AES-256,而且和 ZIP 不同,它连文件名也能加密——没有密码的话,压缩包什么都不泄漏。
缺点是支持度。Windows 和 macOS 不装东西就打不开 7z。对一个你不认识的收件人来说,那是真实的障碍。
RAR 压得比 ZIP 好,和 7z 大致相当,某些内容上还会赢。它支持固实压缩、AES-256,而且有一个真正独特的功能:修复记录——存在压缩包里的冗余数据,可以修复损坏的文件。对于要写进物理介质、或透过不稳定连接传输的东西,那是真实的价值。
但 RAR 是专有格式。解压缩免费;**创建 RAR 压缩包需要授权**。既然 7z 在压缩率上打平、免费而且开放、加密至少一样好,新的东西没什么理由选 RAR。它还在,主要是惯性和既有的压缩包。
这个值得单独讲,因为一般的直觉是错的。当东西太大发不出去:
反过来做——先压缩、发现没省到、再把 ZIP 切成好几段——只会做出一个需要对方重新组装的包裹,而且一点都没变小。