HTTP 中的gzip编码与文件gzip编码一样,一点修改也没有,如果把数据复制下来再用gzip解码完全能解压出文件来。
下面简要分析下。
首先查看gzip格式,发现其是 gzip头+deflate编码+尾
1.gzip头一般使用1f8b08000000000000ff即可
2.deflate编码
deflateInit2(&d_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY);
这里使用-15指定只使用原始deflate编码,不添加zlib头和尾。
然后再deflate就行了。
3.gzip尾部是4个字节的crc校验码+4个字节的原始数据长度。都取低4位。
crc函数在zlib开发包中有crc32
OK,现在就行了。编码出来的文件使用gzip能够解码,而且和HTTP数据能对上