Loading AI tools
DEFLATE編解碼器函式庫 来自维基百科,自由的百科全书
zlib是一個用於資料壓縮的函式庫,由Jean-loup Gailly與Mark Adler開發,初版0.9版發布於1995年5月1日。zlib使用抽象化的DEFLATE演算法,最初是為libpng函式庫所設計,後來逐漸被許多其他軟體使用。此函式庫為自由軟體,使用zlib授權許可。
此條目翻譯品質不佳。 (2021年1月29日) |
zlib在壓縮數據時支持使用gzip數據頭(header)、zlib數據頭或者不使用數據頭。通常情況下,數據壓縮使用zlib數據頭,因為它提供了錯誤數據檢測的功能。當數據不使用數據頭寫入時,由於沒有任何錯誤檢測的原始DEFLATE數據,那麼解壓縮的軟件將無法得知壓縮數據在什麼地方結束。
gzip數據頭比zlib數據頭要大,因為它保存了文件名和其他文件系統信息——事實上,這等同於廣泛使用的gzip文件的數據頭格式。注意zlib函式庫本身並不能創建一個gzip文件,但是它可以將壓縮數據寫入到一個現成的、具有gzip文件頭的文件中。
截至2018年9月,zlib僅支持一個LZ77的變種算法,即DEFLATE的算法。
這個算法使用的系統資源很少,並且對各種數據都能提供很好的壓縮效果。這種算法也由ZIP檔案所使用。(儘管zip文件格式也支持幾種其他的算法)。
zlib的數據頭理論上允許使用其他算法,但目前為止仍然只有這一種算法被使用。
zlib提供了幫助控制CPU和內存資源使用的方法。通過設置不同的壓縮級別數值,即可改變壓縮率和壓縮速度。
除此之外,zlib還提供了內存管理的功能,以便於在諸如嵌入式系統等資源較為受限的環境中使用。
zlib的壓縮算法可以針對特定類型的數據進行優化。
若使用者總是使用zlib壓縮特定類型的數據,則可以選擇有針對性的策略來提高壓縮效率和性能。例如,如果使用者的數據包含很長的重複數據,那麼可以用RLE(運行長度編碼)策略進行優化。
對於一般的數據,默認策略往往是最佳的。
當採用zlib或gzip數據頭時,zlib可以檢測並跳過壓縮文件數據中的錯誤。
此外,如果全刷新點(full-flush points)被寫入到壓縮後的數據流中,那麼zlib可以跳過損壞的數據並繼續解壓縮,並重新同步到下個全刷新點。(儘管zlib並不能糾正錯誤並修復損壞的數據)。全刷新點技術對於在不可靠的傳輸途徑上的大數據流是很有用的,因為這種場景下丟失一些過去的數據很可能並沒有太大影響(比如一些多媒體應用場景)。然而,建立太多的全刷新點會極大地影響速度和壓縮率。
zlib並沒有對於壓縮和解壓縮數據長度的限制,通過重複調用庫函數可以處理無限多的數據塊。一些輔助代碼(計數變量)可能會因此溢出,但是不影響實際的壓縮和解壓縮。當壓縮一個較長或是無限長數據流時,最好寫入全刷新點。
zlib已經成為了一種事實上的業界標準,以至於在標準文檔中,zlib和DEFLATE常常被互換使用。數以千計的應用程序直接或間接依靠zlib壓縮函式庫[3],包括:
因為其代碼的可移植性、寬鬆的授權許可以及較小的內存占用,zlib在許多嵌入式設備中也有應用。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.