我正在爲學習目的而編寫一個解壓縮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