将缓冲区包装在 minizs 中tinfl_decompress

问题描述 投票:0回答:1

出于某种原因,我目前正在尝试使用 minizs

tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags);

在 ESP32 上。正如可用的精简文档中所述,我将

pOut_buf_start
初始化为大小
TINFL_LZ_DICT_SIZE
。由于我正在解码网络流,解压缩数据的大小可能是无限的,但我在输入缓冲区中一次最多输入 512 字节,以避免一次获得太多解压缩数据。

一切正常,直到我到达

pOut_buf_next
接近输出缓冲区末尾的点:

  • 我可以继续减压,但迟早会遇到
    TINFL_STATUS_HAS_MORE_OUTPUT
    (据我所知,这会让我处于无法恢复的状态?)
  • 我可以包装输出缓冲区(
    pOut_buf_next = pOut_buf_start
    pOut_buf_size=TINFL_LZ_DICT_SIZE
    ),但这似乎会破坏我的下一个tinfl_decompress调用的输出

我该如何最好/正确地处理这个问题?

TINFL_STATUS_HAS_MORE_OUTPUT
真的无法挽回吗?在什么时候我可以包装输出缓冲区?

c esp32 miniz
1个回答
0
投票

事实证明我的缓冲区处理是错误的。

TINFL_STATUS_HAS_MORE_OUTPUT
似乎是包装缓冲区的正确时间点。

© www.soinside.com 2019 - 2024. All rights reserved.