私が使用している解凍 API には、次の API があります。
Decode(Stream inStream,Stream outStream)
Stream
デコードされたデータを提供する独自のクラスを作成できるように、この API のラッパーを作成したいと思います。
Stream decodedStream=new BlaDecodeStream(inStream);
を使用するのと同じ方法で、このストリームを XmlReader コンストラクターへのパラメーターとして使用できるようにしますSystem.IO.Compression.GZipStream
。私が知る限り、唯一の他のオプションは、outStream ストリームを MemoryStream または FileStream に設定し、2 ホップで移動することです。私が扱っているファイルは膨大なので、これらのオプションはどちらも特に魅力的ではありません。
車輪の再発明に行く前に、参考になる可能性のある先行技術や、見逃した可能性のある BCL の何かはありますか? ここでCircularStream
の実装は助けになるでしょうが、ストリームの内部バッファが「空」のときに(オーバー/アンダーランとは対照的に)ブロックし、内部からの読み取り時にブロックする同様のものを実際に探しています書き込み時にバッファがいっぱいです。
このようにして、パラメータとして機能しoutStream
、同時に (つまり、別のスレッドから) から読み取ることができますXmlReader
。