我正在尝试向内存中的缓冲区充气,这是我之前使用deflate()进行放气的。
问题在于,我似乎无法知道何时在每次调用inflate()时调整输出缓冲区的大小。
Zlib示例没有此问题,因为它们只是假设膨胀的数据不会溢出其缓冲区。
有人解决了这个问题吗?
答案 0 :(得分:3)
您指的是哪些zlib示例?我所知道的那些没有做出这样的假设。您告诉inflate()
输出缓冲区中有多少空间avail_out
,它只会写出那么多解压缩数据。缓冲区未溢出。然后,您可以对该数据执行任何操作,并再次致电inflate()
,重置next_in
和avail_in
重复使用相同的缓冲区。
您应该阅读this heavily annotated example如何使用zlib。
您是否想要将其全部读入单个缓冲区,正如您所暗示的那样realloc()
?在这种情况下,您只看到avail_out
已归零,重新分配缓冲区,更新avail_out
(和next_out
,因为realloc()
可能已移动缓冲区)并调用再次inflate()
。