Создание потока Шим - PullRequest
1 голос
/ 19 мая 2010

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.

1 Ответ

1 голос
/ 19 мая 2010

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

...