zlib
zlib是提供資料壓縮之用的函式庫,由Jean-loup Gailly與Mark Adler所開發(fā),初版0.9版在1995年5月1日發(fā)表。zlib使用DEFLATE算法,最初是為libpng函式庫所寫的,后來普遍為許多軟件所使用。此函式庫為自由軟件,使用zlib授權(quán)。
zlib是用于資料壓縮的函式庫,由Jean-loup Gailly與Mark Adler所開發(fā),是使用抽象化的DEFLATE壓縮算法gzip文件壓縮程序。初版0.9版在1995年5月1日發(fā)表,最初是為libpng函式庫所寫的,后來普遍為許多軟件所使用。此函式庫為自由軟件,使用zlib授權(quán)。
截至2007年3月,zlib是包含在Coverity的美國國土安全部贊助者選擇繼續(xù)審查的開源項目。
[編輯本段]
功能
* 數(shù)據(jù)頭(header) - zlib能使用一個gzip數(shù)據(jù)頭,zlib數(shù)據(jù)頭或者不使用數(shù)據(jù)頭壓縮數(shù)據(jù)。
通常情況下,數(shù)據(jù)壓縮使用zlib數(shù)據(jù)頭,因為這提供錯誤數(shù)據(jù)檢測。當數(shù)據(jù)不使用數(shù)據(jù)頭寫入時,結(jié)果是沒有任何錯誤檢測的原始DEFLATE數(shù)據(jù),那么解壓縮軟件的調(diào)用者知道壓縮數(shù)據(jù)在什么地方結(jié)束。
gzip數(shù)據(jù)頭比zlib數(shù)據(jù)頭要大,因為它保存了文件名和其他文件系統(tǒng)信息,事實上這是廣泛使用的gzip文件的數(shù)據(jù)頭格式。注意zlib函式庫本身不能創(chuàng)建一個gzip文件,但是它相當輕松的通過把壓縮數(shù)據(jù)寫入到一個有gzip文件頭的文件中。
* 算法 - 目前zlib僅支持一個LZ77的變種算法,DEFLATE的算法。
這個算法使用很少的系統(tǒng)資源,對各種數(shù)據(jù)提供很好的壓縮效果。這也是在ZIP檔案中無一例外的使用這個算法。(盡管zip文件格式也支持幾種其他的算法)。
看起來zlib格式將不會被擴展使用任何其他算法,盡管數(shù)據(jù)頭可以有這種可能性。
* 使用資源 - 函式庫提供了對處理器和內(nèi)存使用控制的能力
不同的壓縮級別數(shù)值可以指示不同的壓縮執(zhí)行速度。
還有內(nèi)存控制管理的功能。這在一些諸如嵌入式系統(tǒng)這樣內(nèi)存有限制的環(huán)境中是有用的。
* 策略 - 壓縮可以針對特定類型的數(shù)據(jù)進行優(yōu)化
如果你總是使用zlib庫壓縮壓縮特定類型的數(shù)據(jù),那么可以使用有針對性的策略可以提高壓縮效率和性能。例如,如果你的數(shù)據(jù)包含很長的重復數(shù)據(jù),那么可以用RLE(運行長度編碼)策略,可能會有更好的結(jié)果。
對于一般的數(shù)據(jù),默認的策略是首選。
* 錯誤處理 - 錯誤可以被發(fā)現(xiàn)和跳過
數(shù)據(jù)混亂可以被檢測(只要數(shù)據(jù)和zlib或者gzip數(shù)據(jù)頭一起被寫入-參見上面)
此外,如果全刷新點(full-flush points)被寫入到壓縮后的數(shù)據(jù)流中,那么錯誤數(shù)據(jù)是可以被跳過的,并且解壓縮將重新同步到下個全刷新點。(錯誤數(shù)據(jù)的無錯恢復被提供)。全刷新點技術(shù)對于在不可靠的通道上的大數(shù)據(jù)流是很有用的,一些過去的數(shù)據(jù)丟失是不重要的(例如多媒體數(shù)據(jù)),但是建立太多的全刷新點會極大的影響速度和壓縮。
* 數(shù)據(jù)長度 - 對于壓縮和解壓縮,沒有數(shù)據(jù)長度的限制
重復調(diào)用庫函數(shù)允許處理無限的數(shù)據(jù)塊。一些輔助代碼(計數(shù)變量)可能會溢出,但是不影響實際的壓縮和解壓縮。
當壓縮一個長(無限)數(shù)據(jù)流時,最好寫入全刷新點。
[編輯本段]
使用zlib的軟件
今天,zlib是一種事實上的業(yè)界標準,以至于在標準文檔中,zlib和DEFLATE常常互換使用。數(shù)以千計的應(yīng)用程序直接或間接依靠zlib壓縮函式庫,[2],包括:
* Linux核心:使用zlib以實作網(wǎng)絡(luò)協(xié)定的壓縮、檔案系統(tǒng)的壓縮以及開機時解壓縮自身的核心。
* libpng,用于PNG圖形格式的一個實現(xiàn),對bitmap數(shù)據(jù)規(guī)定了DEFLATE作為流壓縮方法。
* Apache:使用zlib實作http 1.1。
* OpenSSH、OpenSSL:以zlib達到最佳化加密網(wǎng)絡(luò)傳輸。
* 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 版本控制系統(tǒng),使用zlib來壓縮和遠端倉庫的通訊流量。
* dpkg和RPM等包管理軟件:以zlib解壓縮RPM或者其他封包。
因為其代碼的可移植性,寬松的許可以及較小的內(nèi)存占用,zlib在許多嵌入式設(shè)備中也有應(yīng)用。
zlib和gzip是一回事,gzip不過外面多了一個文件格式,作者都是同一個人。
據(jù)說7zip比zlib有更高的壓縮比和解壓速度,但沒有用過。