zlib

zlib是提供資料壓縮之用的函式庫,由Jean-loup Gailly與Mark Adler所開發,初版0.9版在1995年5月1日發表。zlib使用抽象化DEFLATE演算法,最初是為libpng函式庫所寫的,後來普遍為許多軟體所使用。此函式庫為自由軟體,使用zlib授權。

zlib
穩定版本
1.2.11
(2017年1月15日 (2017-01-15)
源代码库
编程语言C
操作系统跨平台
类型数据压缩
许可协议zlib授权
网站官方网站:
zlib.net
镜像网站:
http://www.gzip.org/zlib/(法国)
http://zlib.ipinfo.de/(德国)

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

功能

数据头

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

数据长度

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

使用zlib的軟體

今天,zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库,[2],包括:

因为其代码的可移植性,宽松的授權许可以及较小的内存占用,zlib在许多嵌入式设备中也有应用。

参见

参考资料

  1. , Coverity, 2007-03-27 [2007-12-10], (原始内容存档于2007-12-12).
  2. Gailly, Jean-loup; Adler, Mark, , 2002-04-18 [2009-01-18], (原始内容存档于2019-06-10).

外部連結

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.