2010-05-18 3 views
1

Декомпрессионного API, который я использую имеет следующий API:Создание прокладок потока

Decode(Stream inStream,Stream outStream) 

я хотел бы, чтобы создать оболочку вокруг этого API, так что я могу создать свой собственный Stream класс, который предлагает до декодированные данные.

Stream decodedStream=new BlaDecodeStream(inStream); 

Так что я могу не использовать этот поток в качестве параметра конструктору XmlReader таким же образом можно было бы использовать System.IO.Compression.GZipStream. Насколько я могу судить, единственным другим вариантом является поток outStream для потока MemoryStream или FileStream и переход в два прыжка. Файлы, с которыми я имею дело, огромны, поэтому ни один из этих вариантов не является особенно привлекательным.

Прежде чем я заново изобретаю колесо, есть ли какой-либо предшествующий уровень техники, который я мог бы извлечь из или что-то в BCL, которое я мог пропустить? Реализация CircularStreamhere пошла бы на помощь, но я действительно искал нечто похожее, которое блокировало бы (в отличие от over/underrun), когда внутренний буфер Stream «пуст» при чтении из него и блокирует, когда внутренний буфер заполняется при записи на него.

Таким образом, он может служить параметром outStream и одновременно (то есть из другого потока) может быть считан с помощью XmlReader.

ответ

1

Я спросил около blocking stream reader некоторое время назад. Я реализовал одно из предложений, и он отлично работает.