zlib压缩是什么

zifan 问答 2019-07-11 10:15:33 阅读(...)

zlib 是提供数据压缩之用的库,由 Jean-loup Gailly 与 Mark Adler 所开发,初版 0.9 版在 1995 年 5 月 1 日发表。zlib 使用抽象化的 DEFLATE 算法,最初是为 libpng 库所写的,后来普遍为许多软件所使用。此库为自由软件,使用 zlib 授权。

zlib

截至 2007 年 3 月,zlib 是包含在 Coverity 的美国国土安全部赞助者选择继续审查的开源项目。

功能

数据头

zlib 能使用 gzip 数据头(header)、zlib 数据头或者不使用数据头压缩数据。通常情况下,数据压缩使用 zlib 数据头,因为这提供错误数据检测。当数据不使用数据头写入时,结果是没有任何错误检测的原始 DEFLATE 数据,那么解压缩软件的调用者知道压缩数据在什么地方结束。

gzip 数据头比 zlib 数据头要大,因为它保存了文件名和其他文件系统信息,事实上这是广泛使用的 gzip 文件的数据头格式。注意 zlib 函数库本身不能创建一个 gzip 文件,但是它能够相当轻松地把压缩数据写入到一个有 gzip 文件头的文件中。

算法

当前 zlib 仅支持一个 LZ77 的变种算法,DEFLATE 的算法。

这个算法使用很少的系统资源,对各种数据提供很好的压缩效果。这也是在 ZIP 文件中无一例外地使用的算法。(尽管 zip 文件格式也支持几种其他的算法)。

看起来 zlib 格式将不会被扩展使用任何其他算法,尽管数据头可以有这种可能性。

使用资源

函数库提供了对处理器和内存使用控制的能力。

不同的压缩级别数值可以指示不同的压缩执行速度。

还有内存控制管理的功能。这在一些诸如嵌入式系统这样内存有限制的环境中是有用的。

策略

压缩可以针对特定类型的数据进行优化。

若用户总是使用 zlib 压缩特定类型的数据,那么使用有针对性的策略可以提高压缩效率和性能。例如,如果用户的数据包含很长的重复数据,那么可以用 RLE(运行长度编码)策略,可能会有更好的结果。

对于一般的数据,默认的策略是首选。

错误处理

错误可以被发现和跳过,数据混乱可以被检测(只要数据和 zlib 或者 gzip 数据头一起被写入)。

此外,如果全刷新点(full-flush points)被写入到压缩后的数据流中,那么错误数据是可以被跳过的,并且解压缩将重新同步到下个全刷新点。(错误数据的无错恢复被提供)。全刷新点技术对于在不可靠的通道上的大数据流是很有用的,一些过去的数据丢失是不重要的(例如多媒体数据),但是创建太多的全刷新点会极大地影响速度和压缩。

数据长度

对于压缩和解压缩,没有数据长度的限制。重复调用库函数允许处理无限的数据块。一些辅助代码(计数变量)可能会溢出,但是不影响实际的压缩和解压缩。当压缩一个长(无限)数据流时,最好写入全刷新点。

收藏 0个人收藏
走进科技生活方式

发表评论

登录后参与评论