zlib是一個通用的壓縮開源庫,提供了在內存中壓縮和解壓的函數,包括對解壓后數據的校驗。目前版本的zlib只支持deflate方法,但是其它的方法將會被添加進來并且擁有同樣的接口。
—— zlib manaul
deflate算法在rfc1951中有詳細的說明。
zlib同時又是一種數據格式,使用zlib庫壓縮后的數據會在deflate數據的頭和尾添加信息,形成zlib格式的數據。
gzip也是一種數據壓縮格式,可以大體分為頭部,數據部和尾部三個部分,其中頭部和尾部主要是一些文檔屬性和校驗信息(rfc1952),數據部主要是用deflate方法壓縮得到的數據。
zlib庫默認的壓縮方法并不是gzip的,而是zlib的,因此使用zlib壓縮得到gzip格式的數據有兩種方法:
1. 使用zlib提供的gz***系列函數可以直接把想要的內容寫入一個磁盤gzip文件;
2. 如果想在內存中生成gzip格式的數據,可以在初始化的時候調用inflateInit2函數,并指定為gzip格式,代碼如下:
z_stream d_stream; d_stream.zalloc = NULL; d_stream.zfree = NULL; d_stream.opaque = NULL; int ret = deflateInit2(&d_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, DEFAULT_WINDOWSIZE, DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY);
if (Z_OK != ret) { printf("init deflate error\n"); return ret; } |
之后,用deflate壓縮出來的數據就是gzip的了。