0

パッキング/変換ストリームプロキシを設計するための最良の方法は何でしょうC#か?

たとえば、入力ストリームがあり、それに似たものを作成したいとboost::iostreamsします。

したがって、たとえば、zlibプロキシをストリームにパックできるので、のコンテンツにアクセスすると、ZlibWrappedStream(initialStream)からデータを受け取りますが、 ?initialStreamを使用してパックされます。zlib

異なるプロキシを次々に適用できるという事実と、マルチスレッドパッキングの可能性を考慮して、これをどのように設計できますか?

4

1 に答える 1

1

.NETストリームは、あなたが話しているチェーンをすでに許可しています。たとえば、データをgzipで圧縮してファイルに保存する場合は、次のように記述できます。

using (var fs = File.OpenWrite(outputFilename))
{
    using (var gz = new GZipStream(fs, CompressionMode.Compress))
    {
        // now, write to the GZip stream . . .
        gz.Write(buffer, 0, buffer, length);
    }
}

そのチェーンを任意に長くすることができます。たとえば、gzipに大きな圧縮ウィンドウを与えるためBufferedStreamに、の前にを置くことがよくあります。GZipStream

すべてのマルチスレッド操作をクラスの内部に限定する限り、マルチスレッドパッキングは問題にはなりません。複数のスレッドが同時にストリームに書き込めるようにする場合は、入力バッファーにデータがインターリーブされないように、何らかの同期メカニズムを作成する必要があります。繰り返しますが、その同期をクラス内部に制限すれば、問題は発生しないはずです。同じ種類のことがマルチスレッドの解凍と読み取りにも当てはまります。

于 2011-11-17T15:35:44.993 に答える