哪些压缩/归档格式支持文件间压缩?

4

这个关于归档PDF的问题让我想知道 - 如果我想要压缩(用于归档目的)很多文件,这些文件本质上是在主模板(信头)之上进行的小更改,似乎可以通过文件间压缩获得巨大的压缩收益。

所有标准的压缩/归档格式是否都支持此功能?据我所知,所有流行的格式都专注于压缩每个单独的文件。

3个回答

7

有几种格式可以进行文件压缩。

最古老的例子是 .tar.gz; 一个 .tar 没有压缩,但将所有文件连接在一起,并在每个文件前添加头文件,而 .gz 只能压缩一个文件。两者按顺序应用,这是 Unix 世界中的传统格式。.tar.bz2 相同,只是使用 bzip2 而不是 gzip。

更近期的例子是带有可选“固实”压缩的格式(例如 RAR 和 7-Zip),如果通过命令行标志或 GUI 选项启用,则可以在压缩之前内部连接所有文件。


谢谢 - 我不知道“固体压缩”这个术语。这很有帮助! - Toybuilder
另一个有趣的选择,但不太流行,与原始问题有些不同:rzip。 - CesarB
在.tar.gz出现之前,还有过.tar.Z,但现在不再使用了(已被.tar.gz完全取代)。 - CesarB

3

看看Google的开放式vcdiff。

http://code.google.com/p/open-vcdiff/

它被设计用于计算小的压缩增量,并实现RFC 3284。

http://www.ietf.org/rfc/rfc3284.txt

微软有一个API可以做类似的事情,但没有任何标准的迹象。
通常,您要查找的算法是基于Bentley/McIlroy的算法。

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.11.8470

特别是当模板的大小大于gzip使用的窗口大小(~32k)或bzip2使用的块大小(100-900k)时,这些算法将会有所收益。
它们被Google内部用于BIGTABLE实现中,以存储压缩的网页,原因与你寻找它们的原因类似。

2

由于LZW压缩(几乎所有压缩算法都使用此算法)需要在过程中建立重复字符的表格,因此您所期望的模式会限制您一次只能解压整个存档。

如果这在您的情况下可接受,实现一个将您的文件合并成一个大文件的方法可能会更简单。


所以,基本上是“双重压缩”(将一个zip文件压缩成另一个zip文件)? - Toybuilder
不,由于原始的zip文件是由单独压缩的“块”组成的,第二次扫描将找不到好的重复项。 - Martin Plante
Toybuilder: 实际上,“tar” 是通常的答案,因为它仅通过将文件与最小索引串联起来生成一个大存档。这就是为什么 .tar.gz 文件在 Unix 世界中如此受欢迎的原因。 - Edward Kmett

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