这个关于归档PDF的问题让我想知道 - 如果我想要压缩(用于归档目的)很多文件,这些文件本质上是在主模板(信头)之上进行的小更改,似乎可以通过文件间压缩获得巨大的压缩收益。
所有标准的压缩/归档格式是否都支持此功能?据我所知,所有流行的格式都专注于压缩每个单独的文件。
这个关于归档PDF的问题让我想知道 - 如果我想要压缩(用于归档目的)很多文件,这些文件本质上是在主模板(信头)之上进行的小更改,似乎可以通过文件间压缩获得巨大的压缩收益。
所有标准的压缩/归档格式是否都支持此功能?据我所知,所有流行的格式都专注于压缩每个单独的文件。
有几种格式可以进行文件压缩。
最古老的例子是 .tar.gz; 一个 .tar 没有压缩,但将所有文件连接在一起,并在每个文件前添加头文件,而 .gz 只能压缩一个文件。两者按顺序应用,这是 Unix 世界中的传统格式。.tar.bz2 相同,只是使用 bzip2 而不是 gzip。
更近期的例子是带有可选“固实”压缩的格式(例如 RAR 和 7-Zip),如果通过命令行标志或 GUI 选项启用,则可以在压缩之前内部连接所有文件。
看看Google的开放式vcdiff。
http://code.google.com/p/open-vcdiff/
它被设计用于计算小的压缩增量,并实现RFC 3284。http://www.ietf.org/rfc/rfc3284.txt
微软有一个API可以做类似的事情,但没有任何标准的迹象。http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.11.8470
特别是当模板的大小大于gzip使用的窗口大小(~32k)或bzip2使用的块大小(100-900k)时,这些算法将会有所收益。由于LZW压缩(几乎所有压缩算法都使用此算法)需要在过程中建立重复字符的表格,因此您所期望的模式会限制您一次只能解压整个存档。
如果这在您的情况下可接受,实现一个将您的文件合并成一个大文件的方法可能会更简单。