2012-12-18 287 views
0

我有從使用拉鍊壓縮(RFC1951)Photoshop文件以下數據:DeflateStream壓縮/解壓縮inconsitency

250, 255, 159, 1, 47, 248, 63, 42, 63, 172, 229, 1, 2, 12, 0, 209, 255, 31, 225 

哪個解以下,X16:

255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

重新壓縮這給我:

251, 255, 159, 1, 47, 248, 63, 42, 63, 172, 229, 1 

爲什麼這不是完全一樣的原始輸入?

(最初發布在CodePlex上,但沒有得到迴應:http://dotnetzip.codeplex.com/discussions/406943

回答

2

首先,以獲得正確的術語,RFC 1951年是deflate格式(其中您的數據),而不是「拉鍊式壓縮」。 zip可以使用deflate,但deflate數據然後用zip包頭,預告片和目錄包裝。其次,一般來說,從來沒有任何保證解壓縮壓縮總是會給你同樣的東西。大多數壓縮器具有不同的壓縮級別和其他選項,可以爲相同的輸入提供不同的壓縮輸出。無損壓縮機唯一保證的是壓縮 - 解壓縮會給你同樣的東西。

對於您的特定示例,第一臺壓縮機投擲了一些無關的空白塊(其中兩個)。那放氣流拆解:

static 
literal 255 255 0 
match 29 1 
literal 255 
match 258 32 
match 221 32 
end 
! 
static 
end 
! 
last 
static 
end 

第二壓縮機不包括多餘的空塊:

last 
static 
literal 255 255 0 
match 29 1 
literal 255 
match 258 32 
match 221 32 
end 
+0

非常感謝馬克!你用什麼來拆解流?如果使用不同的數據得到一致的結果(對於無關塊),我只需將它注入到結果流中以便匹配。 –

+1

我使用了'infgen.c',你可以從http://zlib.net/infgen.c.gz下載。 –