DeflateStream压缩/解压缩不一致

时间:2012-12-18 00:15:52

标签: deflate dotnetzip deflatestream

我从使用zip压缩的photoshop文件(RFC1951)获得以下数据:

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

1 个答案:

答案 0 :(得分:2)

首先,为了使术语正确,RFC 1951是deflate格式(您的数据是),而不是“zip-compression”。 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