4

まず、よく混乱する用語をいくつか定義しましょう。

deflate = compression_algorithm;
zlib = header + deflate + trailer;
gzip = header + deflate + trailer;

基本的に次のことができるライブラリを探しています。

if(method == "gzip"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.GZIP);
}
else if(method == "deflate"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.DEFLATE);
}
else if(method == "zlib"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.ZLIB);
}

Webで使用するために3つの圧縮形式を比較可能にテストする方法を探しています。各フォーマットのデフレート圧縮アルゴリズムは、まったく同じ実装にしたいと思います。私はすでにzlib.netをハックして、コマンドで生のdeflateを強制的に実行しました(「文書化されていない機能」を介して)...ただし、gzipヘッダーとトレーラーを追加することは私のリーグから少し外れています。

これを行う.netライブラリを知っている人はいますか?


明確化:

HTTP 1.1のdeflate圧縮形式は、実際にはzlib圧縮形式です。Zlibは、deflateのラッパーです。常に2バイトのヘッダーと4バイトのトレーラーがあります(圧縮方法とレベルが同じ場合)。

Gzipは、内部でzlibと同じ圧縮データ形式を使用します...これはdeflateです(HTTP 1.1 deflate[zlib]ではなくrawdeflate)。私自身の予備テストによると、gzip圧縮されたデータはzlibの12倍のうち11倍です。

deflateは、データを圧縮するために使用される圧縮アルゴリズムです。デフレートされたデータの周りにラッパーメソッド(ヘッダーやトレーラーなど)がない場合、私はそれを「デフレート」と呼びます。おそらく、代わりに「生のデフレート」と呼ぶべきでした。

私はこれらの圧縮方法とWebブラウザー内でのそれらのサポートの分析を行っており、3つのタイプすべてに対して単一の圧縮方法を使用する必要があります。

4

2 に答える 2

3

標準ドキュメントを読んだり、zlib、.NET gzipとdeflateの実装、および.NET用の他のいくつかの圧縮パッケージで行った作業に基づいて、次のことを決定しました。

1)「rawdeflate」は、「HTTP 1.1 deflate」と呼ばれるものよりも常に小さく、gzipよりも常に小さくなります。同じライブラリを使用して3つすべてを生成したと仮定します。つまり、特定の圧縮ライブラリの場合、deflate<zlib<gzipです。

2)サイズの違いは非常に小さいです。deflateとzlibの違いは、通常、ほんの数バイトです。deflateとgzipの違いは、せいぜい数十バイトです。これは、ファイルサイズに関係なく当てはまります。

3)deflateの実装が異なれば、圧縮率と実行時間も大きく異なります。たとえば、zlibの実装は、.NET3.5の実装よりも優れた圧縮と高速な実行を提供します。

4)異なる実装間の相互運用性はほぼ100%です。つまり、1つのライブラリによって作成されたdeflate(またはgzip)ファイルは、他のライブラリによって解凍できます。これが当てはまらない場合があると聞いたことがありますが、作成できませんでした。

5)CRC計算のため、gzipの作成にはzlibよりも大幅に時間がかかります。

生のdeflateデータを考えると、zlibまたはgzipファイルを生成できるC#ライブラリはわかりませんが、標準ドキュメントを調べれば、かなり簡単に作成できるはずです。

また、「rawdeflate」をサポートしているブラウザも知りません。でも、実際にやってみたとは言えません。私はいつも「HTTP1.1デフレート」を使用してきました。

于 2010-09-10T20:25:16.870 に答える
3

DotNetZipは、 RFC 1950(ZLIB)RFC 1951(DEFLATE)、およびRFC 1952(GZIP)を実行します。3つすべてに同じ基盤となる圧縮エンジンを使用します。

DotNetZipはZIPファイルも実行します。

于 2010-11-05T02:57:14.187 に答える