出于某种原因,我目前正在尝试使用 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
真的无法挽回吗?在什么时候我可以包装输出缓冲区?
事实证明我的缓冲区处理是错误的。
TINFL_STATUS_HAS_MORE_OUTPUT
似乎是包装缓冲区的正确时间点。