GZIP或DEFLATE可以增加文件大小的最大值是什么?

时间:2014-05-09 18:12:24

标签: compression gzip deflate information-theory libz

众所周知,GZIP或DEFLATE(或任何压缩机制)有时可以增加文件大小。是否可以增加文件的最大值(百分比或常量)?它是什么?

如果一个文件是X字节,并且我要gzip它,我需要提前预算文件空间 - 最糟糕的情况是什么?

更新:有两个开销:GZIP添加一个标头,通常是18个字节,但基本上是任意长的。 DEFLATE怎么样?这可以通过乘法因子扩展内容,我不知道。有谁知道它是什么?

2 个答案:

答案 0 :(得分:6)

gzip将添加的标头和预告片至少 18个字节。标头还可以包含路径名,这将添加许多字节加上尾随零。

gzip中的deflate实现可以选择每个块存储16383个字节,开销为5个字节。如果备选方案需要更多字节,它将始终选择这样做。因此 n 输入字节的最大压缩字节数为:

n+5(floor(n/16383)+1)

答案 1 :(得分:0)

压缩文件总是有一个标题,指示如何解压缩它们。

该标题的大小表示压缩无法压缩的文件时的最坏情况开销(因为数据没有顺序/模式;它是随机的)。

标题因具体算法而异,也可能包含可变长度信息,例如档案中的文件列表。

GZip至少有18个字节的开销(页脚中的标题+ CRC-32),并且可能包含存档中的文件列表。

http://en.wikipedia.org/wiki/Gzip#File_format

请注意,在特殊情况下,自定义压缩算法可以减少或消除标头开销。例如,我使用压缩和解压缩软件已知的自定义压缩字典来压缩短文本,因此不需要标头。这是一个相当罕见的用例,在大多数情况下可能没用(假设存储和带宽相对便宜)。