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

How does DEFLATE(zlib) determine block size?

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

在 RFC 1591 中,存在以下解释: "The compressor terminates a block when it determines that starting a new block with fresh trees would be useful, or when the block size fills up the compressor's block buffer."

这对我来说还不够。我想详细了解结束当前区块和开始新区块需要什么条件。

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

zlib 的 deflate 在当前符号缓冲区填满(默认为 16,383 个符号)或输入数据完成(已请求 Z_FINISH)时结束块。 zlib 中的 deflate 不会尝试判断何时提前结束块可能是有益的。

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

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