我正在努力理解gzip的不同压缩级别(1-9)在实现编码方面的区别。
我查看了zlib C源代码,似乎与搜索最长匹配字符串的详尽程度有关,但是寻找更具体的信息。
例如,这些级别是否在哈夫曼编码的分配上有任何差异?
我查看了zlib C源代码,似乎与搜索最长匹配字符串的详尽程度有关,但是寻找更具体的信息。
例如,这些级别是否在哈夫曼编码的分配上有任何差异?
据我记得,是的,这主要取决于你将要分配的缓冲区的大小。缓冲区越大,压缩效果就会越好。如果你能够分配一个大小大约为“输入文件大小×1.2”的缓冲区,在大多数情况下,你将获得使用Huffman算法最佳的压缩效果。
原因在于,当你有如此大的缓冲区时,Huffman表将包含所有字节,并以最佳结果展现出来。当算法用尽缓冲区空间时,它需要重置其表(流中添加了一个代码来实现),这意味着你需要从头开始构建一个新的编码表,这样就会丢失掉重新设计新表所需的字节...
尽管存在一些情况下重置可能是有益的(例如文件前半部分有许多字节设置为值X,而后半部分有更多字节设置为值Y),但这种情况很少发生。