4

这个关于归档 PDF 的问题让我想知道——如果我想压缩(出于归档目的)大量文件,这些文件本质上是在主模板(信笺抬头)之上所做的小改动,似乎可以通过文件间压缩。

是否有任何标准压缩/归档格式支持这一点?AFAIK,所有流行的格式都专注于压缩每个文件。

4

3 回答 3

6

几种格式进行文件间压缩。

最古老的例子是 .tar.gz;.tar 没有压缩,而是将所有文件连接在一起,每个文件前面都有标题,而 .gz 只能压缩一个文件。两者都是按顺序应用的,它是 Unix 世界的传统格式。.tar.bz2 是一样的,只是用 bzip2 代替 gzip。

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

于 2008-11-05T20:17:12.700 回答
3

看看 google 的 open-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 实现内部使用它们来存储压缩网页,原因与您寻找它们的原因大致相同。

于 2008-11-05T19:07:52.107 回答
2

由于 LZW 压缩(它们几乎都使用)涉及构建一个重复字符表,例如您想要的模式将限制您必须一次解压缩整个存档。

如果这在您的情况下是可以接受的,那么实现一种在压缩之前将文件合并到一个大文件中的方法可能会更简单。

于 2008-11-05T19:06:55.337 回答