首页 文章

gzip的不同压缩级别有何不同?

提问于
浏览
1

我试图更好地理解gzip的不同压缩级别(1-9)在编码实现方式上有何不同 .

我查看了zlib C源代码,它似乎与搜索最长匹配字符串的详尽程度有关,但寻找更具体的信息 .

例如,这些级别是否会产生霍夫曼代码分配的任何差异?

2 回答

  • 0

    正如您所观察到的那样,这些级别的区别仅在于deflate查找匹配字符串的难度 . 霍夫曼编码在选定的固定数量的符号(文字和长度/距离对)上完成,产生“块”,其中该数量由存储器级别而不是压缩级别定义 . 生成的霍夫曼码必然不同,因为被编码的符号将不同 .

    存储器级别的选择也对压缩有一些影响,因为更多数量的符号将块的代码描述的成本扩展到更多符号,但是太多的符号可能阻止将霍夫曼代码适应于统计中的局部变化 . 符号 . 默认内存级别为8(每个块产生16,383个符号),因为测试表明压缩比9级更好(每个块32,767个符号) . 但您的里程可能会有所不同

  • 0

    从我记得,是的,它主要基于你将分配的缓冲区的大小 . 缓冲区越大,压缩效果越好 . 如果您可以分配大小约为 input file size × 1.2 的缓冲区,那么在大多数情况下,您将获得使用Huffman的最佳压缩 .

    原因是当你有这么大的缓冲区时,霍夫曼表将包含所有具有最佳结果的字节 . 当算法用完缓冲区空间时,它需要重置其表(为此添加的流中有一个代码),这意味着你从头开始一个新的编码表,这意味着你丢失了重新设计新表的字节数...

    虽然有些情况下重置可能是有益的(即在文件的前半部分设置为值X的许多字节,然后在后半部分中设置值Y更多),但很少会发生这种情况 .

相关问题