Буферизация байтовых данных в C #

Мое приложение читает байты из TCP-сокета и должно их буферизовать, чтобы я мог извлекать из них сообщения позже. Из-за природы TCP я могу получить частичное или несколько сообщений за одно чтение, поэтому после каждого чтения я хотел бы проверить буфер и извлечь столько полных сообщений, сколько доступно.

Поэтому мне нужен класс, который позволяет мне выполните следующие действия:

  • добавить к нему произвольные байты [] данных
  • проверить содержимое, не потребляя его, в частности, проверить количество содержимого, а также найти наличие определенного байта или байтов
  • извлечь и использовать часть данных в виде байта [], оставив остальное на будущее чтение

Я ожидаю, что то, что я хочу, может быть сделано с одним или несколькими существующими классами в библиотеке .NET, но я не уверен который. System.IO.MemoryStream выглядит близко к тому, что я хочу, но (а) неясно, подходит ли он для использования в качестве буфера (удаляются ли прочитанные данные из емкости?) И ( б) кажется, что чтение и запись происходят в одном и том же месте - «Текущая позиция потока - это позиция, в которой может произойти следующая операция чтения или записи» - чего я не хочу. Мне нужно писать до конца и читать спереди.

17
задан Kylotan 19 August 2011 в 14:20
поделиться