zlib:`deflate`和`compress`函数之间的差异

时间:2012-04-15 21:09:26

标签: compression zlib deflate

zlib中deflate()compress()函数之间有什么区别?

我查看了在线示例,其中一些使用了deflate而其他人使用了压缩。

我应该如何决定使用哪种情况?

1 个答案:

答案 0 :(得分:55)

compress()用于在单个调用中压缩数据,并始终压缩为 zlib 格式,该格式是使用双字节头和四字节检查来对数据进行压缩价值预告片。 compress()本身就是使用的。

deflate()用于一次压缩数据块,和/或压缩为其他格式,例如 gzip -wrapped或 raw ,以及与其他选项,如内存级别和压缩策略。

如果您拥有一次可用的所有数据并且有足够的内存来保存结果,那么您将使用compress(),并且您需要默认的压缩格式,内存使用和策略。否则,您将使用deflate()

deflate()本身并未使用。您需要使用deflateInit()deflateInit2()来初始化z_stream使用的deflate()结构。然后,您调用deflate()一次或多次以接收数据以进行压缩并使结果可用。最后,调用deflateEnd()来释放结构中使用的内存资源。您可以阅读 zlib.h http://zlib.net/zlib_how.html中的文档以获取更多信息。