woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

Zlib与GZip

zlib

  zlib是提供资料压缩之用的函式库,由Jean-loup GaillyMark Adler所开发,初版0.9版在199551发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。

  zlib是用于资料压缩的函式库,由Jean-loup GaillyMark Adler所开发,是使用抽象化的DEFLATE压缩算法gzip文件压缩程序。初版0.9版在199551发表,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。

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

[编辑本段]

功能

  * 数据头(header) - zlib能使用一个gzip数据头,zlib数据头或者不使用数据头压缩数据。

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

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

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

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

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

  * 使用资源 - 函式库提供了对处理器和内存使用控制的能力

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

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

  * 策略 - 压缩可以针对特定类型的数据进行优化

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

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

  * 错误处理 - 错误可以被发现和跳过

  数据混乱可以被检测(只要数据和zlib或者gzip数据头一起被写入-参见上面)

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

  * 数据长度 - 对于压缩和解压缩,没有数据长度的限制

  重复调用库函数允许处理无限的数据块。一些辅助代码(计数变量)可能会溢出,但是不影响实际的压缩和解压缩。

  当压缩一个长(无限)数据流时,最好写入全刷新点。

[编辑本段]

使用zlib的软件

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

  * Linux核心:使用zlib以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心。

  * libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。

  * Apache:使用zlib实作http 1.1

  * OpenSSHOpenSSL:以zlib达到最佳化加密网络传输。

  * FFmpeg:以zlib读写Matroska等以DEFLATE算法压缩的多媒体串流格式。

  * rsync:以zlib最佳化远端同步时的传输。

  * The dpkg and RPM package managers, which use zlib to unpack files from compressed software packages.

  * Subversion Git CVS 版本控制系统,使用zlib来压缩和远端仓库的通讯流量。

  * dpkgRPM等包管理软件:以zlib解压缩RPM或者其他封包。

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

zlib和gzip是一回事,gzip不过外面多了一个文件格式,作者都是同一个人。
据说7zip比zlib有更高的压缩比和解压速度,但没有用过。

posted on 2009-09-07 21:25 肥仔 阅读(3447) 评论(0)  编辑 收藏 引用 所属分类: 库 & 代码段


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理