正确设置和使用zlib

问题描述:

我正在玩zlib并在阅读zlib_how后,我仍然有几个问题。据我所知,在调用任何deflate()之前应该调用deflateInit这是好的,但是当我有意重复使用同一个流不止一次时会发生什么?正确设置和使用zlib

每次我完成压缩时,我应该拨打deflateEnd,然后重新初始化每次通过额外呼叫deflateInit调用压缩?有关内部缓冲区动态分配的内容?

我看到初始化和结束malloc/free很多,是否可以用这种方式配置内部缓冲区将在两次调用之间重用?

+0

Downvoting没有给出理由?非常有用... – kreuzerkrieg

您应该使用deflateReset()代替deflateEnd()其次deflateInit(),为了避免不必要的free()的和malloc()的。

您还应该阅读zlib.h中的文档,您可能会在这里找到该文档。

+0

谢谢马克! deflateReset()是否适合在调用deflate()后调用Z_STREAM_ERROR?而不是deflateEnd?如果deflateReset()返回Z_STREAM_ERROR,我该怎么办?调用deflateEnd()后跟deflateInit()? – kreuzerkrieg

+1

如果得到'Z_STREAM_ERROR',那么该状态或者从未被初始化,结束或者被破坏。对于任何一个你不应该调用'deflateEnd()'或'deflateReset()',因为状态不再有效。 (虽然这些也可能会注意到并返回'Z_STREAM_ERROR')。如果您正确使用zlib,即初始化,重置和以正确顺序结束,并且您从不会无意中在状态上写入,那么您将永远无法获得一个'Z_STREAM_ERROR'。 –

+0

这是一个非常重要的说明。再次感谢! – kreuzerkrieg