This question on archiving PDF's让我想知道 - 如果我想压缩(出于存档目的)许多文件,这些文件基本上是在主模板(信头)之上进行的小改动,看起来巨大的压缩增益可以有文件间压缩。
是否有任何标准压缩/存档格式支持此功能? AFAIK,所有流行的格式都专注于压缩每个文件。
答案 0 :(得分:5)
多种格式进行文件间压缩。
最老的例子是.tar.gz; .tar没有压缩但是将所有文件连接在一起,每个文件前都有标题,而.gz只能压缩一个文件。两者都是按顺序应用的,它是Unix世界中的传统格式。 .tar.bz2是相同的,只有bzip2而不是gzip。
最近的示例是具有可选“实体”压缩的格式(例如,RAR和7-Zip),如果通过命令行标志或GUI选项启用,它可以在压缩之前在内部连接所有文件。
答案 1 :(得分: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实现来存储压缩网页的原因与您寻找它们的原因大致相同。
答案 2 :(得分:2)
由于LZW压缩(它们几乎都使用它)涉及构建一个重复字符表,如您所希望的那样,模式会限制您必须立即解压缩整个存档。
如果在您的情况下这是可以接受的,那么在压缩之前实现一个只将文件加入一个大文件的方法可能更简单。