如何划分GZIP文件中的块?

Man*_*lva 1 c gzip

我正在为学习目的而编写一个解压缩GZIP文件的C程序.

根据GZIP 规范

gzip文件由一系列"成员"(压缩数据集)组成.每个成员的格式在以下部分中指定.成员只是在文件中一个接一个地出现,在它们之前,之间或之后没有其他信息.

一个成员由标题组成(可能带有可选字段,具体取决于某些标志值),一些压缩块(使用deflate算法),最后是CRC32和原始未压缩文件的大小.

我有两个问题:

  1. 我如何划分成员?实际上,一个gzip文件中真的有多个成员吗?似乎一个成员对应一个文件(例如文件名头)
  2. 如何界定预告片中的最后一个块(CRC + SIZE)?

Mar*_*ler 5

这种情况并不常见,但有时您会在单个文件中看到串联的gzip流.gzip认为这是一个单一的数据流,而不是多个"文件",因此忽略了文件名.

如果通过"如何划分最后一个块"表示最后一个收缩块,则最后一个收缩块在其标题中只有一个位,将其标记为最后一个块.最后的deflate块之后是crc和未压缩的长度(模2 ^ 32).