Zip / 7zip 压缩的区别

14

我有许多zip文件需要分发给用户,大约有130个。每个zip文件包含许多类似的文本、HTML、XML和JPG文件。总共,这些zip文件总共146兆字节;解压缩后,它们的内容总共551mb。

我想以尽可能小的格式将所有这些文件一起分发给用户。我研究了两种不同的方法,每种方法使用两种不同的压缩方案,即zip和7zip(我了解到这是LZMA或其变体):

  1. 将所有zip文件压缩成一个压缩文件并发送该文件(single.zip/7z
  2. 将zip文件的未压缩内容压缩成一个压缩文件并发送该文件(combined.zip/7z

例如,假设我有3个zip文件,A.zip、B.zip和C.zip,每个文件都包含一个文本文件、一个HTML文件和一个XML文件。使用方法1,将创建一个包含A.zip、B.zip和C.zip的单个压缩文件。使用方法2,将创建一个包含A.txt、A.html、A.xml、B.txt、B.html、B.xml、C.txt、C.html和C.xml的单个压缩文件。

我的假设是,在任何一种压缩方案下,通过方法2生成的文件大小将比通过方法1生成的文件大小更小或者至少相同,因为您可以考虑所有的文件一起利用效率。至少,方法2将避免多个zip文件的开销。

7zip工具生成的文件大小令人惊讶的结果如下:

  1. single.zip - 142mb
  2. single.7z - 124mb
  3. combined.zip - 149mb
  4. combined.7z - 38mb

我并不惊讶7zip格式产生的文件比zip格式小(结果2/4比结果1/3好),因为它通常比zip更好地压缩。但令人惊讶的是,对于zip格式,将所有130个zip文件压缩在一起所得到的输出文件要小于将它们所有未压缩的内容压缩在一起所得到的输出文件(结果3比结果1更好)。

为什么将多个zip文件一起压缩比将它们的未压缩内容一起压缩更有效率呢?

我唯一能想到的就是,在压缩过程中,7zip格式会跨越所有文件内容构建一个字典,因此可以利用文件之间的相似之处,而zip格式会按文件单独构建字典。这是真的吗?即使如此,这仍然无法解释为什么结果3比结果1大了7MB。

感谢您的帮助。

2个回答

10
  • .zip.7z都是无损压缩格式。.7z是新一代的压缩格式,压缩比较高,但是它的兼容性不如.zip广泛,并且压缩/解压缩的计算成本略高。

  • 具体压缩效果取决于您要压缩的文件类型,但根据维基百科关于7zip的文章

    2011年,TopTenReviews发现7z压缩至少比ZIP压缩好17%,而7-Zip自己的网站从2002年开始就报告说,虽然压缩比率结果非常依赖于用于测试的数据,“通常,7-Zip将压缩到7z格式中,比压缩到zip格式中高出30-70%,而7-Zip将压缩到zip格式中,比大多数其他支持Zip的程序更好地压缩2-10%。”


很酷,我没有意识到7zip压缩的效果比其他压缩程序更好。 - ycomp

3
为什么将多个压缩文件一起压缩比将它们的未压缩内容一起压缩更有效率?
你的假设是正确的:7zip使用Solid compression,而zip则不使用。它的工作方式类似于您的字典想法。通过将不同文件的共同部分组合成一个“块”,从而减小其大小。

4
我有3.7GB的SQL文件,使用7zip压缩后只有21MB。我感到非常惊讶。我随时都会推荐7z而不是zip。 - Manny265

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接