我有许多 zip 文件需要分发给用户,其中大约有 130 个。每个 zip 文件都包含许多类似的文本、html、xml 和 jpg 文件。 zip 文件总共 146 MB;解压后,内容总计 551mb。
我想以尽可能小的格式将所有这些文件一起分发给用户。我研究了两种不同的方法,每种方法都使用两种不同的压缩方案,zip 和 7zip(我理解是 LZMA 或其变体):
single.zip/7z
)combined.zip/7z
)例如,假设我有 3 个 zip 文件,A.zip、B.zip 和 C.zip,每个文件包含 1 个文本文件、1 个 html 文件和 1 个 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工具生成的文件大小)如下:
我对 7zip 格式生成的文件比 zip 格式更小(结果 2/4 与结果 1/3)并不感到惊讶,因为它通常比 zip 压缩得更好。令人惊讶的是,对于 zip 格式,将所有 130 个 zip 文件压缩在一起会产生比压缩所有未压缩内容更小的输出文件(结果 3 与结果 1)。
为什么将多个 zip 文件压缩在一起比将其解压缩的内容压缩在一起更有效?我唯一能想到的是,在压缩过程中,7zip 格式会在所有文件内容中构建一个字典,因此它可以利用文件之间的相似性,而 zip 格式会为每个文件构建字典。这是真的吗?即使这样仍然无法解释为什么结果 3 比结果 1 大 7mb。
感谢您的帮助。
并且它具有普通拉链所缺乏的优点, 即使在“0”又名“仅存储”模式下: 可能有更大的档案,可能有模糊加密(密码保护文件或目录,加密,并且不显示 7z 容器中的内容)。
P.S.:如果您使用 Gmail,请不要尝试发送此类安全存档,因为它不起作用。顺便说一句,大多数类型的加密文件都不会被发送。从谷歌的角度来看,“出于安全原因”。 gmail 用户的观点可能是 Google 想知道用户发送的内容,或者至少让其检测机器人释放邮件或文件中的某些单词,主要是出于商业原因。