Zlib
| 初始版本 | 0.9(1995年5月1日) |
|---|---|
| 穩定版本 | 1.2.11 (2017年1月15日)
|
| 原始碼庫 |
|
| 程式語言 | C |
| 作業系統 | 跨平台 |
| 類型 | 資料壓縮 |
| 授權條款 | zlib授權 |
| 網站 | 官方網站: zlib.net 鏡像網站: http://www.gzip.org/zlib/(法国) http://zlib.ipinfo.de/(德国) |
zlib是提供資料壓縮之用的函式庫,由Jean-loup Gailly與Mark Adler所開發,初版0.9版在1995年5月1日發表。zlib使用抽象化的DEFLATE演算法,最初是為libpng函式庫所寫的,後來普遍為許多軟體所使用。此函式庫為自由軟體,使用zlib授權。
截至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],包括:
- Linux核心:使用zlib以實作網路協定的壓縮、檔案系統的壓縮以及啟動時解壓縮自身的核心。
- libpng,用於PNG圖形格式的一個實現,對bitmap資料規定了DEFLATE作為流壓縮方法。
- Apache:使用zlib實作http 1.1。
- OpenSSH、OpenSSL:以zlib達到最佳化加密網路傳輸。
- FFmpeg:以zlib讀寫Matroska等以DEFLATE演算法壓縮的多媒體串流格式。
- rsync:以zlib最佳化遠端同步時的傳輸。
- Subversion、Git和CVS等版本控制系統,使用zlib來壓縮和遠端倉庫的通訊流量。
- dpkg和RPM等包管理軟體:以zlib解壓縮RPM或者其他封包。
因為其代碼的可移植性,寬鬆的授權授權以及較小的記憶體占用,zlib在許多嵌入式裝置中也有應用。
參見
參考資料
- ^ Press release: Critical Open Source Software Projects Receive 6,000 Bug Fixes in First Year of Coverity Scan Site, Coverity, 2007-03-27 [2007-12-10], (原始內容存檔於2007-12-12).
- ^ Gailly, Jean-loup; Adler, Mark, zlib Applications, 2002-04-18 [2009-01-18], (原始內容存檔於2019-06-10).