Когда я использую средство чтения текста, как лучше всего определить, что я на самом деле нахожусь в конце своих данных? Обычный способ сделать это выглядит следующим образом, например:
while(reader.Peek() != -1)
{
///do stuff
}
Однако в документации msdn здесь указано следующее
Целое число, представляющее следующий символ для чтения, или -1, если больше нет доступных символов или средство чтения не поддерживает поиск.
Итак, мой вопрос: как узнать, действительно ли вы находитесь в конце данных читателей или читатель/базовый поток просто не поддерживает поиск, поскольку возвращаемое значение здесь кажется неоднозначным? если, например, у меня есть следующее
public void Parse(TextReader reader)
{
while(reader.Peek() != -1) //am I really at the end
{
//do stuff
}
}
Parse(new StreamReader(new NetworkStream(....)));
поскольку сетевой поток не поддерживает поиск.
Или я что-то пропустил?
Изменить:
Просто чтобы уточнить, я могу легко реализовать это, используя более конкретный класс StreamReader, так как я могу проверить EoS. Однако, чтобы сделать вещи более общими, я хотел использовать TextReader, поэтому я не привязан только к StreamReader. Однако семантика Peek кажется немного странной, почему она просто не выбрасывает, если поиск не поддерживается, и с этой целью почему нет свойства EoF для TextReader?
Peek
вместоRead
? - person Douglas   schedule 30.11.2012reader.BaseStream.CanSeek
? - person Douglas   schedule 30.11.2012.Peek
, а не.EndOfStream
, чтобы проверить, достигнут ли конец потока? Есть ли преимущество в использовании.Peek
? - person igrimpe   schedule 30.11.2012