Zlib deflate/inflate 正确初始化

Zlib deflate/inflate proper initialization

在以“迂腐”的方式使用 zlib 时,我偶然发现了一些不一致的地方,我想自己解决。

对于inflateInit(),手册指出:

... The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller.

但在下一段中:

... So next_in, and avail_in, next_out, and avail_out are unused and unchanged.

换句话说,手册要求在调用inflateInit()之前初始化next_inavail_in,但同时声明它们不会被使用反正。这是为什么?在我的例子中,我试图让它们都保持未初始化和初始化为零而没有问题,直到在调用 deflate() 之前进行真正的准备。但严格来说,这违反了手册,除非“必须初始化”意味着我可以将它们初始化为零。但那又何必呢?

请注意deflateInit()没有这样的要求:

... The fields zalloc, zfree and opaque must be initialized before by the caller.

为什么不对称?

有人认为inflateInit()可以利用压缩数据头中的信息进行初始化。所以接口要求是初始化next_inavail_in。正如描述所指出的,使用短语“当前版本”和“当前实现”,此类初始化被推迟到 inflate() 的调用。 zlib 的未来版本可能会做一些不同的事情。 (虽然我怀疑它会。)

deflateInit() 提供输入数据没有合理的好处,因此不对称。