Поскольку чтение части потока должно быть достаточно простым, я предполагаю, что вам на самом деле нужен новый объект Stream, который обращается только к данному сегменту базового потока.
т.е.Вы хотите что-то вроде этого:
Stream segment = new StreamSegment(underlyingStream, 8000, 7000);
У меня есть такой класс, и вы можете найти его здесь: LVK.IO.PartialStream .Он опирается на другие классы из моей библиотеки классов, в частности LVK.IO.WrapperStream , но вы можете найти все это там, просто возьмите несколько файлов, которые вам действительно нужны (если вы решите их использовать).
Чтобы использовать его, вы должны указать, принадлежит ли ваш объект PartialStream базовому потоку.Если это так, то при удалении объекта PartialStream он также удаляет базовый поток.
Так что для приведенного выше примера:
Stream segment = new PartialStream(underlyingStream, false, 8000, 7000);
при условии, что он не должен владеть базовым потоком.stream (или передайте true
в качестве второго параметра.)
Примечания:
- Построение вышеупомянутого объекта PartialStream переместит базовый поток в начало этого сегмента (позиция 8000 ввышеприведенный пример.)
- Вы не должны использовать базовый поток, пока вы используете объект частичного потока, поскольку происходит некоторая внутренняя бухгалтерия, связанная с позицией внутри сегмента.Если вы перемещаете основной поток, не проходя через частичный поток, поведение не определено.