Дублирование потока

У меня есть производитель, который предоставляет экземпляр System.IO.Stream. У меня также есть несколько клиентов, которые потребляют этот поток.

Можно ли предоставить каждому клиенту «частный просмотр» потока? Например, если clientA читает из потока, это не влияет на позицию, которую видит clientB (т. е. если clientB начинает читать из потока, он получает его начало, а не с того места, где clientA оставил позицию). Если это имеет значение, клиенты только читают из потока.

Надеюсь, это имеет смысл.

Заранее спасибо, Майк


person Community    schedule 04.05.2009    source источник
comment
Спасибо за ваши ответы, ребята! Я надеялся, что в .Net framework уже есть что-то встроенное, но, думаю, мне придется реализовать это самому. Спасибо еще раз!   -  person    schedule 05.05.2009


Ответы (3)


Я думаю, вам нужно создать свой собственный «TssStream», который обрабатывает буферизацию из исходного потока в несколько потоков.

Количество методов, которые вам нужно переопределить из Stream, ограничено только чтением, но координация, где каждый клиент (вероятно, через помощника), потребует небольшого размышления.

person Richard    schedule 04.05.2009

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

person mmx    schedule 04.05.2009

Вы можете сделать это, прочитав поток, кэшируя данные и открывая новые потоки в кэше для каждого клиента.

person gabor    schedule 04.05.2009