【问题标题】:Zlib deflate/inflate proper initializationZlib deflate/inflate 正确初始化
【发布时间】:2022-01-30 00:09:17
【问题描述】:

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

对于inflateInit(),手册指出:

...字段next_inavail_inzalloczfreeopaque必须在调用者之前初始化。

在下一段中:

...所以next_inavail_innext_outavail_out 未使用且未更改。

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

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

...字段zalloczfreeopaque必须在调用者之前初始化。

为什么不对称?

【问题讨论】:

    标签: compression zlib deflate


    【解决方案1】:

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

    deflateInit() 提供输入数据没有任何可能的好处,因此存在不对称性。

    【讨论】:

    • 感谢您,马克,您的参与! :-) 我确实希望未来的版本不会阻止这一点,因为如果压缩机在消息开始到达之前很久就准备好接收消息,则需要一个明确的步骤来推迟deflateInit()
    • ...不会打破这个...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多