Zlib的deflate / inflate正确初始化

3
在“严谨”地使用zlib时,我遇到了一些不一致之处,我想对此进行澄清。手册中对于inflateInit()的说明如下:
“...在调用inflateInit()之前,必须由调用方初始化next_inavail_inzalloczfreeopaque字段。”
然而在下一段中:
“... 因此,next_inavail_innext_outavail_out都未使用,且不变。”
换句话说,手册要求在调用inflateInit()之前初始化next_inavail_in,但同时又声明它们不会被使用。为什么呢?在我的情况下,我尝试将它们都保持未初始化或初始化为零,直到在调用deflate()之前进行真正的准备工作时也没有出现问题。但严格来讲,这违反了手册要求,“必须初始化”是否意味着我可以将它们初始化为零呢?那还有何必呢?
请注意,对于deflateInit()没有这样的要求:
“...在调用deflateInit()之前,必须由调用方初始化zalloczfreeopaque字段。”
为什么会存在这种不对称性呢?
1个回答

1
inflateInit()有一个想法,即可以利用压缩数据头中的信息进行初始化。因此,接口要求需要初始化next_inavail_in。正如描述所指出的,使用“当前版本”和“当前实现”这些短语,这种初始化被推迟到调用inflate()的时候。zlib的未来版本可能会做一些不同的事情。(尽管我怀疑它不会。)

deflateInit()提供输入数据没有什么明显的好处,因此存在不对称性。


谢谢你的参与,Mark!:-) 我希望未来的版本不会破坏这个功能,因为在压缩器准备好接收消息之前很长一段时间,需要明确地延迟 deflateInit() 步骤。 - neoxic
不会 破坏 这个... - neoxic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接