ZLib是DEFLATE算法的實現庫,它的API同時支持gzip文件格式以及一個簡化的數據流格式。zlib數據流格式、DEFLATE以及gzip文件格式均已被分別標准化為 RFC 1950、RFC 1951、RFC 1952。
gzip在 HTTP壓縮,一種在萬維網中加速傳輸HTML和其他內容的技術。它是在 RFC 2016 中規定的三種標准HTTP壓縮格式之一。這個RFC頁定義了一種叫做"DEFLATE"的zlib格式,它和gzip格式相同,除了gzip添加了11字節頭部和尾部的負載。但是,現在還是建議使用gzip而不是zlib,因為根據 RFC 1950, IE還沒有正確的實現該標准,還不能處理zlib格式。
Delphi 使用 ZLib 壓縮和解壓 GZip:
uses System.ZLib; const ZLIB_GZIP_WINDOWBITS = 31; ZLIB_DEFLATE_WINDOWBITS = 15; type TZLibCompressionLevel = TZCompressionLevel; /// <summary> /// 使用 ZLib 壓縮流 /// </summary> /// <param name="Source">要壓縮的數據流</param> /// <param name="Dest">壓縮后的數據流</param> /// <param name="Level">壓縮級別</param> /// <param name="GZipFormat">是否使用 GZip 壓縮算法</param> procedure ZLibCompressStream(Source, Dest: TStream; const Level: TZLibCompressionLevel = zcFastest; const GZipFormat: Boolean = True); overload; /// <summary> /// 使用 ZLib 解壓縮流 /// </summary> /// <param name="Source">要解壓的數據流</param> /// <param name="Dest">解壓后的數據流</param> /// <param name="GZipFormat">是否使用 GZip 壓縮算法</param> procedure ZLibDecompressStream(Source, Dest: TStream; const GZipFormat: Boolean = True); overload; procedure ZLibCompressStream(Source, Dest: TStream; const Level: TZLibCompressionLevel; const GZipFormat: Boolean); var WindowBits: Integer; Zip: TZCompressionStream; begin if GZipFormat then WindowBits := ZLIB_GZIP_WINDOWBITS else WindowBits := ZLIB_DEFLATE_WINDOWBITS; Zip := TZCompressionStream.Create(Dest, Level, WindowBits); try Zip.CopyFrom(Source, 0); finally FreeAndNil(Zip); end; end; procedure ZLibDecompressStream(Source, Dest: TStream; const GZipFormat: Boolean); var WindowBits: Integer; UnZip: TDecompressionStream; begin if GZipFormat then WindowBits := ZLIB_GZIP_WINDOWBITS else WindowBits := ZLIB_DEFLATE_WINDOWBITS; UnZip := TDecompressionStream.Create(Source, WindowBits); try Dest.CopyFrom(UnZip, 0); finally FreeAndNil(UnZip); end; end;