Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compression 哪些压缩/归档格式支持文件间压缩?_Compression_Archive - Fatal编程技术网

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

Compression 哪些压缩/归档格式支持文件间压缩?,compression,archive,Compression,Archive,让我想知道——如果我想压缩(出于存档目的)大量文件,而这些文件本质上是在主模板(信笺)上所做的微小更改,那么通过文件间压缩似乎可以获得巨大的压缩收益 是否有任何标准压缩/归档格式支持此功能?好吧,所有流行的格式都集中在压缩每个文件上 因为LZW压缩(几乎所有人都使用)需要在进行过程中构建一个包含重复字符的表,如所需的模式,这将限制您必须立即解压缩整个归档文件 如果这在您的情况下是可以接受的,那么实现一种在压缩之前将文件合并成一个大文件的方法可能会更简单。看看谷歌的OpenVCDiff 它设计用

让我想知道——如果我想压缩(出于存档目的)大量文件,而这些文件本质上是在主模板(信笺)上所做的微小更改,那么通过文件间压缩似乎可以获得巨大的压缩收益

是否有任何标准压缩/归档格式支持此功能?好吧,所有流行的格式都集中在压缩每个文件上

因为LZW压缩(几乎所有人都使用)需要在进行过程中构建一个包含重复字符的表,如所需的模式,这将限制您必须立即解压缩整个归档文件


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

看看谷歌的OpenVCDiff

它设计用于计算小的压缩增量,并实现RFC3284

微软有一个API来做类似的事情,没有任何标准的外表

一般来说,您正在寻找的算法是基于Bentley/McIlroy的:

特别是,如果模板的大小大于gzip使用的窗口大小(~32k)或bzip2使用的块大小(100-900k),那么这些算法将是一个胜利


Google在其BIGTABLE实现内部使用它们来存储压缩的网页,其原因与您查找它们的原因大致相同。

几种格式用于文件间压缩

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


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

因此,基本上是“双重压缩”(压缩压缩压缩文件)?不,原始压缩文件由单独的压缩“BLOB”组成,Toybuilder:实际上,“tar”是通常的答案,因为它只是通过将文件与最小索引连接起来,从而从文件中生成一个大的归档文件。这就是.tar.gz文件在unix世界如此流行的原因。谢谢-我不知道“固体压缩”这个术语。这有帮助!另一个有趣的问题,但不太受欢迎,所以有点超出了最初的问题:rzip.And before.tar.gz有.tar.Z,但它不再使用了(它被.tar.gz完全取代)。