DEFLATE有十种不同的压缩等级(0无压缩和最快,9最佳压缩和最慢)。确定原始DEFLATE数据的最佳方法是什么?
一种显而易见(但速度慢)的方法是尝试每种方法并按顺序进行比较。作为一个附带问题,是否可以保证文件压缩数据的大小从压缩级别0到9级严格不增加?如果是这样,二进制搜索可以将此过程加速两倍/三。
答案 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)
除了慢速方法,没有。
不,不能保证压缩的大小是单调的。然而,不单调是非常罕见的。