zlib:如何维度avail_out

我想使用zlib来缩小一小块内存(<= 16 KiB)。 输出也存储在内存块中。 这里没有磁盘或数据库访问。

根据文档,我应该反复调用deflate() ,直到整个输入被放气。 在这两者之间,我必须增加输出所在的内存块的大小。

然而,这似乎不必要地复杂,甚至可能效率低下。 据我所知输入的大小,我不能预先确定输出所需的最大大小,然后只需调用一次deflate()吗?

如果是这样,最大输出尺寸是多少? 我假设类似:输入大小+一些字节开销

zlib具有计算缓冲区将缩小到的最大大小的函数。 您的假设是正确的 – 返回的值是输入缓冲区的大小+标题大小。 通货紧缩后,您可以重新分配缓冲区以回收“浪费”的内存。
从zlib.h:

 ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or deflateInit2(), and after deflateSetHeader(), if used. This would be used to allocate an output buffer for deflation in a single pass, and so would be called before deflate(). */