我有许多zip文件需要分发给用户,大约有130个。每个zip文件包含许多类似的文本、HTML、XML和JPG文件。总共,这些zip文件总共146兆字节;解压缩后,它们的内容总共551mb。
我想以尽可能小的格式将所有这些文件一起分发给用户。我研究了两种不同的方法,每种方法使用两种不同的压缩方案,即zip和7zip(我了解到这是LZMA或其变体):
- 将所有zip文件压缩成一个压缩文件并发送该文件(
single.zip/7z
) - 将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工具生成的文件大小令人惊讶的结果如下:
- single.zip - 142mb
- single.7z - 124mb
- combined.zip - 149mb
- combined.7z - 38mb
我并不惊讶7zip格式产生的文件比zip格式小(结果2/4比结果1/3好),因为它通常比zip更好地压缩。但令人惊讶的是,对于zip格式,将所有130个zip文件压缩在一起所得到的输出文件要小于将它们所有未压缩的内容压缩在一起所得到的输出文件(结果3比结果1更好)。
为什么将多个zip文件一起压缩比将它们的未压缩内容一起压缩更有效率呢?
我唯一能想到的就是,在压缩过程中,7zip格式会跨越所有文件内容构建一个字典,因此可以利用文件之间的相似之处,而zip格式会按文件单独构建字典。这是真的吗?即使如此,这仍然无法解释为什么结果3比结果1大了7MB。
感谢您的帮助。