zlib 解码和 gzip 解码流程
Deflate 压缩格式有以下两种封装方式:
zlib 封装,结构如下:
-
CMF 是压缩方式的描述, FLG 中的 FDICT 标记了是否使用预先设置的字典,目前不支持 FDICT 为1的情况。ADLER32 为类似于 CRC32 的校验码。zlib 封装详细说明请参考 RFC1950。
-
zlib 封装部分由软件解析,Deflate 码流部分,由硬件 Inflate 模块解析,硬件解码完成后生成对应的ADLER32校验码,然后由软件比较硬件生成的校验码和zlib格式封装中ADLER32是否一致。如果一致则说明zlib解码正确。
-
gzip 封装,结构如下:
-
对 Deflate 格式加入了头信息和尾部信息。gzip 对原始码流用 CRC32 校验,和 zlib 中的校验方式不同。并且尾部加入了4 bytes 的原始码流的 size 信息。硬件解码时候,可以根据 size 的大小,来申请输出 Buffer。gzip 封装的详细说明请参考 RFC1952。
-
gzip 封装部分由软件解析,Deflate 码流部分,由硬件 Inflate 模块解析,硬件解码完成后生成对应的 CRC32 校验码,然后由软件比较硬件生成的校验码和 gzip 格式封装中 CRC32 是否一致。如果一致则说明 gzip 解码正确。
-