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_in
和avail_in
,但同时声明它们不会被使用反正。这是为什么?在我的例子中,我试图让它们都保持未初始化和初始化为零而没有问题,直到在调用 deflate()
之前进行真正的准备。但严格来说,这违反了手册,除非“必须初始化”意味着我可以将它们初始化为零。但那又何必呢?
请注意deflateInit()
没有这样的要求:
... The fields zalloc
, zfree
and opaque
must be initialized before by the caller.
为什么不对称?
有人认为inflateInit()
可以利用压缩数据头中的信息进行初始化。所以接口要求是初始化next_in
和avail_in
。正如描述所指出的,使用短语“当前版本”和“当前实现”,此类初始化被推迟到 inflate()
的调用。 zlib 的未来版本可能会做一些不同的事情。 (虽然我怀疑它会。)
向 deflateInit()
提供输入数据没有合理的好处,因此不对称。
在以“迂腐”的方式使用 zlib 时,我偶然发现了一些不一致的地方,我想自己解决。
对于inflateInit()
,手册指出:
... The fields
next_in
,avail_in
,zalloc
,zfree
andopaque
must be initialized before by the caller.
但在下一段中:
... So
next_in
, andavail_in
,next_out
, andavail_out
are unused and unchanged.
换句话说,手册要求在调用inflateInit()
之前初始化next_in
和avail_in
,但同时声明它们不会被使用反正。这是为什么?在我的例子中,我试图让它们都保持未初始化和初始化为零而没有问题,直到在调用 deflate()
之前进行真正的准备。但严格来说,这违反了手册,除非“必须初始化”意味着我可以将它们初始化为零。但那又何必呢?
请注意deflateInit()
没有这样的要求:
... The fields
zalloc
,zfree
andopaque
must be initialized before by the caller.
为什么不对称?
有人认为inflateInit()
可以利用压缩数据头中的信息进行初始化。所以接口要求是初始化next_in
和avail_in
。正如描述所指出的,使用短语“当前版本”和“当前实现”,此类初始化被推迟到 inflate()
的调用。 zlib 的未来版本可能会做一些不同的事情。 (虽然我怀疑它会。)
向 deflateInit()
提供输入数据没有合理的好处,因此不对称。