【发布时间】:2026-01-24 18:10:01
【问题描述】:
This question on archiving PDF's 让我想知道——如果我想压缩(出于存档目的)大量文件,这些文件本质上是在主模板(信笺抬头)之上进行的小改动,似乎可以获得巨大的压缩收益文件间压缩。
是否有任何标准压缩/归档格式支持此功能? AFAIK,所有流行的格式都专注于压缩每个文件。
【问题讨论】:
标签: compression archive
This question on archiving PDF's 让我想知道——如果我想压缩(出于存档目的)大量文件,这些文件本质上是在主模板(信笺抬头)之上进行的小改动,似乎可以获得巨大的压缩收益文件间压缩。
是否有任何标准压缩/归档格式支持此功能? AFAIK,所有流行的格式都专注于压缩每个文件。
【问题讨论】:
标签: compression archive
多种格式进行文件间压缩。
最古老的例子是 .tar.gz; .tar 没有压缩,但将所有文件连接在一起,每个文件前面都有标题,而 .gz 只能压缩一个文件。两者都是按顺序应用的,它是 Unix 世界的传统格式。 .tar.bz2 是一样的,只是用 bzip2 代替 gzip。
最近的示例是具有可选“实体”压缩的格式(例如 RAR 和 7-Zip),如果通过命令行标志或 GUI 选项启用,它们可以在压缩之前在内部连接所有文件。
【讨论】:
看看 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 实现内部使用它们来存储压缩网页,原因与您寻找它们的原因大致相同。
【讨论】:
由于 LZW 压缩(它们几乎都使用)涉及构建一个重复字符表,例如您想要的架构,这将限制您必须一次解压缩整个存档。
如果这在您的情况下是可以接受的,那么实现一种在压缩前将文件合并成一个大文件的方法可能会更简单。
【讨论】: