zlib:`deflate`和`compress`函数之间的区别

29

deflate()compress() 是zlib中两个函数,它们有什么不同?

我查看了一些在线示例,有些使用了deflate,而有些使用了compress。

我应该如何决定在什么情况下使用其中之一?

1个回答

98

compress()用于单次压缩数据,始终将数据压缩为zlib格式,该格式为带有两字节标头和四字节检查值尾部的deflate数据。compress()单独使用。

deflate()用于逐个块地压缩数据,并/或压缩到其他格式(例如包装在gzipraw中),以及使用其他选项,如内存级别和压缩策略。

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

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


47
马克·阿德勒(Mark Adler)绝对是这方面的权威。 - Xenon
谢谢。我读了一些,但一开始并没有完全理解。那只是太多信息了,但我已经重新阅读了它。 - mma1480
10
太好了,现在我知道为什么它被称为Adler-32。 - raj_gt1
@MarkAdler 回答非常详细。有没有什么好的来源或书籍可以了解更多关于Zlib或Gzip的知识? - Govinda Sakhare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接