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
.
我想知道 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
.