DEFLATE(zlib)如何确定块大小?

时间:2016-05-12 02:58:14

标签: compression zlib deflate

我想知道DEFLATE如何确定块大小(我的意思是,在zlib中。)

在RFC 1591中,存在以下解释: "当压缩器确定开始使用新树的新块时,或者当块大小填满压缩器的块缓冲区时,压缩器终止块。"

这对我来说还不够。我想知道结束当前块需要什么条件并详细启动新块。

DEFLATE如何决定新鲜的发辫是否有用? 压缩器的块缓冲区的大小是多少?

1 个答案:

答案 0 :(得分:7)

当当前符号缓冲区填满(默认为16,383个符号)或输入数据已完成(请求Z_FINISH)时,

zlib的deflate结束该块。 zlib中的deflate不会试图判断何时更早结束一个块可能是有益的。

在这种情况下,一个符号是一个文字或一个任意长度的匹配。

符号缓冲区的大小由memLevel的{​​{1}}参数决定。 deflateInit2()memLevel,这是deflateInit()使用的默认值,会生成16,383个符号。 memLevel可以是1到9,其中符号缓冲区大小为(1 << (memLevel + 6)) - 1