8

通常のネットワーク トラフィックからストリームの途中でzlib圧縮ストリームに切り替える必要があるネットワーク アプリケーションを構築しています。IEnumerable<byte>この問題に関する私の考えには、ネットワークコードがフィードできるクラスを介してすべてのデータを渡し、解凍されたストリームを引き出して、それを既存のプロトコル解析コードに渡すブールスイッチが含まれます。

私が見たもの:

  • ZLib.NET - 少し… 折衷的で、私が望むものとはまったく異なります。それでも、構築するためのまともなスタートを切るでしょう。(ここでのジョン・スキートのコメントも、私にはほとんど刺激を与えません。)
  • SharpZipLib - これは zlib をまったくサポートしていないようですか? 誰かがこれを確認または否定できますか?

私はすべての管理されたソリューションを非常に好みますが、それを試してみましょう... .NETにこのライブラリの他の実装がありますか、それは私がやりたいことにより適している可能性があります. NET を作成し、それを出発点として構築しますか?

PS:

Jon から詳細を求められたので、ここに記載します。

MCCP 2を実装しようとしています。これには、ネットワーク ストリームで送信されるシグナルが含まれます。このシグナルの後のすべては、zlib 圧縮データ ストリームです。上記のリンクには、それが意味するものへのリンクがあります。とにかく、明確にするために、私はこれの受信側(サーバーではなくクライアント)にいて、すでにネットワークストリームから読み取られた大量のデータを持っており、トグルはこれの真ん中にあります(すべてそのため、NetworkStream を引き継ぐ (または残りのデータを手動でフィードする) 前に、ソリューションに追加のデータをフィードできるようにする必要があります。

4

5 に答える 5

4

SharpZipLib は ZLib をサポートしています。FAQを参照してください。

さらに、System.IO.Compression 名前空間が必要なものをサポートしているかどうかを確認しましたか?

ただし、IEnumerable<byte>ストリームは連鎖するように設計されています。

編集:わかりました...バッファリングをサポートするストリームが必要なようですが、提供する以上の制御が必要ですBufferedStream。解凍トグルが表示された場合は、ストリームを「巻き戻し」、その上に GZipStream を作成する必要があります。巻き戻しに十分なバッファーを常に確保できるように、バッファーは少なくとも Read() への最大の呼び出しと同じ大きさである必要があります。

于 2009-02-04T20:56:42.103 に答える
3

DotNetZipには、データの zlib ストリームを圧縮または解凍するためのZlibStreamが含まれています。聞いていませんが、GZipStream と DeflateStream もあります。それがあなたのものなら、ZlibCodecクラスと同様に。(ストリームではなく、バッファを膨張または収縮させるだけです)。

DotNetZip は、リベラルなライセンスを持つ完全に管理されたライブラリです。Zlib のものを取得するために .zip 機能を使用する必要はありません。そして、zlib のものは、この目的のためだけに別の (小さい) DLL としてパッケージ化されています。

于 2009-03-06T16:14:34.420 に答える
0

私の知る限り、ZLib (gzip) ライブラリはヘッダー内のファイルのリストをサポートしていません。それがあなたにとって重要であると仮定しますが、それは大きな欠点のようです. これは、少し前にシャープの zip ライブラリを使用したときのことなので、削除しても構いません :)

于 2009-02-04T21:13:56.590 に答える