2

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

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

然而,这似乎不必要地复杂,甚至可能效率低下。因为我知道输入的大小,我不能预先确定输出所需的最大大小,然后只需一次调用即可完成所有操作deflate()

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

4

1 回答 1

8

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().
*/
于 2011-02-08T21:02:05.007 回答