【问题标题】:How do I read arbitrary bytes from a zlib stream?如何从 zlib 流中读取任意字节?
【发布时间】:2010-11-12 11:15:04
【问题描述】:

我想一次一个字节地将 zlib 流的inflate() 的输出读入缓冲区,以便解析出单行。

有没有办法指定inflate() 返回的字节数,以便我可以查看换行符?

【问题讨论】:

    标签: c zlib inflate


    【解决方案1】:

    这可能会带来糟糕的性能,因为inflate() 函数可能需要一些启动成本。

    我建议只使用合理的输出缓冲区大小,然后在每次调用 inflate() 后遍历缓冲区,收集找到的所有完整行。当然,很可能会有一条“尾巴”,即一条不完整的线,您需要在下一轮中跟踪它。

    【讨论】:

    • 是的,这是一个很好的方法,但是应该注意不要超出通过解包实际获得的结果和未初始化的任何内容。
    • 感谢您的提示。做簿记有点痛苦,但它似乎奏效了。诀窍是确保不要读取过去的zStream.avail_out 并在该点以空值终止缓冲区 - 正是这个剪辑的缓冲区需要解析换行符。不过,我已经设置了一个大缓冲区,它运行得相当快。
    【解决方案2】:

    当您调用inflate() 时,您将一个指针传递给z_stream_s 结构。 z_stream_s::avail_out该结构的成员变量正是用于指定输出缓冲区的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2016-06-28
      • 2023-03-31
      相关资源
      最近更新 更多