2016-05-30 100 views

回答

3

如果十六進制中的第一個字節的低位爲8,那麼它是一個zlib流。否則,這是一個原始的縮小流。 (假設您已知道唯一可能的選擇是有效的zlib流或有效的deflate流)。原始deflate流永遠不會在低位第一個nybble中有8,但zlib流總是會有。

背景:

ZLIB頭格式把壓縮方法中的第一個字節的低半字節。這種壓縮方法對於deflate而言總是爲8

原始減壓流中的位序列從字節的最低有效位開始。如果前三位是000(因爲它們是8),則表示存儲的(不是壓縮的塊),並且它不是最後的塊。存儲塊將字節邊界上的輸入字節。因此,在寫入000位之後,壓縮器完成的下一步是用零位填充剩餘的字節以達到下一個字節邊界。因此,下一位永遠不會是1,所以對於有效的deflate流來說前4位不可能是1000,或者第一個nybble是8。 (請注意,比特被從下往上讀取。)

有效放氣流的第一(即,低)半字節只能0 .. 5a .. d。如果您看到6 .. 9ef,那麼它不是有效的放氣流。