0

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

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 )

4

1 回答 1

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
于 2012-12-18T03:46:31.410 回答