我正在为学习目的而编写一个解压缩GZIP文件的C程序。如何分隔GZIP文件中的块?
按照GZIP spec
甲gzip文件由一系列 “成员”(压缩数据集)中的。 每个成员的格式在以下部分中指定。 成员只是在文件中一个接一个地出现,没有 之前,之间或之后的附加信息。
和一个构件(也许具有取决于一些标志值可选字段),某些压缩块(使用DEFLATE算法)和最后的CRC32和原始未压缩文件的大小由一个首部。
我有两个问题:
- 如何界定成员?实际上,一个gzip文件中是否真的有多个成员?看起来,一个成员对应一个文件(例如文件名头)
- 如何从尾部分隔最后一个块(CRC + SIZE)?
感谢您的回答,并且因为我在“specs”中的某个地方读到了您的名字;-)我在这里问另外一个问题:我没有调查过很多紧缩流压缩,但是如何分隔这些块?我只是把每个块看作是一个头,就像你说的最后一个块一样,但是我看不到“大小”信息。我如何知道什么时候正在阅读新的标题? – 2012-07-18 15:56:54
放气块没有大小前缀。相反,它们是以一个结束代码自我终止的。当你到达结束码时,你会寻找一个新的块。或者,如果最后一个块位被设置在该块的开头,则处理一个预告片。 – 2012-07-18 16:59:05
再次感谢。你能确认这个结束代码值是256吗? – 2012-07-19 09:17:57