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