Декомпрессионного API, который я использую имеет следующий API:Создание прокладок потока
Decode(Stream inStream,Stream outStream)
я хотел бы, чтобы создать оболочку вокруг этого API, так что я могу создать свой собственный Stream
класс, который предлагает до декодированные данные.
Stream decodedStream=new BlaDecodeStream(inStream);
Так что я могу не использовать этот поток в качестве параметра конструктору XmlReader таким же образом можно было бы использовать System.IO.Compression.GZipStream
. Насколько я могу судить, единственным другим вариантом является поток outStream для потока MemoryStream или FileStream и переход в два прыжка. Файлы, с которыми я имею дело, огромны, поэтому ни один из этих вариантов не является особенно привлекательным.
Прежде чем я заново изобретаю колесо, есть ли какой-либо предшествующий уровень техники, который я мог бы извлечь из или что-то в BCL, которое я мог пропустить? Реализация CircularStream
here пошла бы на помощь, но я действительно искал нечто похожее, которое блокировало бы (в отличие от over/underrun), когда внутренний буфер Stream «пуст» при чтении из него и блокирует, когда внутренний буфер заполняется при записи на него.
Таким образом, он может служить параметром outStream
и одновременно (то есть из другого потока) может быть считан с помощью XmlReader
.