众所周知,GZIP或DEFLATE(或任何压缩机制)有时可以增加文件大小。那么文件增大的最大百分比或常数是多少?
如果一个文件大小为X字节,并且我将对其进行gzip压缩,并且需要提前预算文件空间,那么最坏情况是什么?
更新:有两个开销:GZIP添加标头,通常为18个字节,但实际上可以任意长。那DEFLATE呢?它可以通过乘法因子扩展内容,其乘法因子未知。是否有人知道这个值是多少?
众所周知,GZIP或DEFLATE(或任何压缩机制)有时可以增加文件大小。那么文件增大的最大百分比或常数是多少?
如果一个文件大小为X字节,并且我将对其进行gzip压缩,并且需要提前预算文件空间,那么最坏情况是什么?
更新:有两个开销:GZIP添加标头,通常为18个字节,但实际上可以任意长。那DEFLATE呢?它可以通过乘法因子扩展内容,其乘法因子未知。是否有人知道这个值是多少?
deflate()
时返回avail_out==0。这不应该发生,对吧?在调用之前,avail_in为10485760,avail_out为10488965,即多3205个。使用zlib v1.2.5(OSX 10.10.5上的默认值),压缩级别9,策略0,wbits -15。 - Thomas Tempelmann压缩文件总是有一个头部,指示如何解压它们。
该头部的大小表示在压缩无法压缩的文件(因为数据没有顺序/模式,是随机的)时的最坏情况开销。
头部根据具体算法而异,也可能包含可变长度的信息,例如存档中的文件列表。
GZip至少有18个字节的开销(头部+页脚中的CRC-32),并且可以选择包含存档中的文件列表。
请注意,在特殊情况下,自定义压缩算法可以减少或消除头部开销。例如,我曾经使用过一个由压缩和解压软件知道的自定义压缩字典来压缩短文本,因此不需要头部。这是一个相当罕见的用例,可能在大多数情况下并不有用(考虑到存储和带宽相对便宜)。