【问题标题】:DeflateStream compress/decompress inconsitencyDeflateStream 压缩/解压缩不一致
【发布时间】:2012-12-18 00:15:52
【问题描述】:

我从使用 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

【问题讨论】:

    标签: deflate dotnetzip deflatestream


    【解决方案1】:

    首先,为了正确使用术语,RFC 1951 是 deflate 格式(您的数据就是这样),而不是“zip-compression”。 zip 可以使用 deflate,但 deflate 数据随后会使用 zip 标头、预告片和目录进行包装。

    其次,一般来说,没有任何保证减压-压缩总是会给你同样的东西。大多数压缩器具有不同的压缩级别和其他选项,可以为相同的输入提供不同的压缩输出。无损压缩器唯一能保证的是压缩-解压缩会给你同样的东西。

    对于您的特定示例,第一个压缩器放入了一些无关的空块(其中两个)。那个 deflate 流被反汇编了:

    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
    

    【讨论】:

    • 非常感谢马克!你用什么来反汇编流?如果我得到不同数据的一致结果(对于无关块),我只需将其注入结果流中以使其匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2012-05-18
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多