如何确定DEFLATE的压缩级别?

时间:2013-04-22 17:41:11

标签: zip zlib deflate

DEFLATE有十种不同的压缩等级(0无压缩和最快,9最佳压缩和最慢)。确定原始DEFLATE数据的最佳方法是什么?

一种显而易见(但速度慢)的方法是尝试每种方法并按顺序进行比较。作为一个附带问题,是否可以保证文件压缩数据的大小从压缩级别0到9级严格不增加?如果是这样,二进制搜索可以将此过程加速两倍/三。

2 个答案:

答案 0 :(得分:3)

如果您只有压缩数据,则不包含此类信息。压缩级别仅可配置为压缩,因此不会在压缩数据中进行编码。

但是,如果您使用类似zlib的内容,它会添加包含压缩级别的标头。来自https://tools.ietf.org/html/rfc1950

  FLEVEL (Compression level)
     These flags are available for use by specific compression
     methods.  The "deflate" method (CM = 8) sets these flags as
     follows:

        0 - compressor used fastest algorithm
        1 - compressor used fast algorithm
        2 - compressor used default algorithm
        3 - compressor used maximum compression, slowest algorithm

     The information in FLEVEL is not needed for decompression; it
     is there to indicate if recompression might be worthwhile.

如果您不使用添加信息标题的库,您可以自己实现它(如果您的应用程序确实需要它)。这只是在开头添加额外字节或两个(通常)的问题。

答案 1 :(得分:2)

除了慢速方法,没有。

不,不能保证压缩的大小是单调的。然而,不单调是非常罕见的。