10

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

如果一个文件是 X 字节,我要压缩它,我需要提前为文件空间做预算——最坏的情况是什么?

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

4

2 回答 2

10

gzip 将添加至少18 个字节的标头和尾标。标头还可以包含一个路径名,它将添加那么多字节加上一个尾随零。

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

n+5(楼层(n/16383)+1)

于 2014-05-10T07:18:59.830 回答
0

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

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

标头因特定算法而异,并且可能包含可变长度信息,例如存档中的文件列表。

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

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

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

于 2014-05-09T18:16:04.797 回答