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は「zip圧縮」ではなく(データの)デフレート形式です。zipはdeflateを使用できますが、deflateデータは、zipヘッダー、トレーラー、およびディレクトリでラップされます。

第二に、一般的に、解凍-圧縮が常に同じことを提供するという保証はありません。ほとんどのコンプレッサーには、同じ入力に対して異なる圧縮出力を提供できるさまざまなレベルの圧縮およびその他のオプションがあります。ロスレスコンプレッサーによって保証される唯一のことは、圧縮-減圧があなたに同じことを与えるということです。

あなたの特定の例では、最初のコンプレッサーがいくつかの無関係な空のブロック(そのうちの2つ)を投入しました。分解されたその収縮ストリーム:

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

2番目のコンプレッサーには、無関係な空のブロックが含まれていませんでした。

last
static
literal 255 255 0
match 29 1
literal 255
match 258 32
match 221 32
end
于 2012-12-18T03:46:31.410 に答える