2016-05-27 12 views
0

Мне было интересно, есть ли какой-либо метод или свойство, которые позволяют нам видеть, есть ли доступные байты для чтения в потоке, связанном с BinaryReader (в моем случае это NetworkStream , поскольку я выполняю TCP-связь). Я проверил documentation, и единственный метод, который я видел, - PeekChar(), но он проверяет только, есть ли следующий байт (символ), поэтому в случае, если есть много байтов для чтения, создание цикла while для увеличения счетчика может быть inneficient.BinaryReader C# - Проверьте, остались ли байты

Что касается связи TCP, проблема в том, что протокол приложения по TCP не был определен мной, и я просто пытаюсь выяснить, как это работает! Конечно, будет какое-то «поле длины», которое даст мне несколько подсказок о прочитанных байтах, но я знаю, что я просто проверяю, как это работает, и этот вопрос пришел мне на ум.

+0

TCP - это протокол потоковой передачи ... не уверен, что вы имеете в виду, но «длина» в значительной степени противоположна определению 'streaming'. 'BinaryReader' - это всего лишь оболочка вокруг потока протокола. – atlaste

+0

Ммм ... Извините, но я не понимаю вашу точку зрения! – Biurrun

+3

Что вы планируете делать, если есть _aren't_ любые доступные байты прямо сейчас? Это не означает, что больше не будет ... –

ответ

0

BinaryReader будет блокироваться до тех пор, пока он не прочитает все необходимые байты. Единственным исключением является обнаружение конца потока. Но NetworkStream - открытый поток и не имеет конца условия потока. Таким образом, вы можете создать класс с основными читателями (ReadInt, ReadDouble и т. Д.), Который использует peek, читает байты по байтам и не блокирует; или использовать другую асинхронную технологию.

 Смежные вопросы

  • Нет связанных вопросов^_^