У меня есть поток для чтения и анализа последовательных данных. Сообщения находятся в двоичном формате и начинаются с символов «F», «S», «Q» или «M». Нет новых строк, и нет специального символа окончания (символы выше указывают, что сообщение завершено и все до того, как оно будет готово к анализу).Быстрый подход к постоянному считыванию и анализу последовательных данных
Как я могу читать и анализировать данные?
Все, что приходит на ум, имеющий 4096 байт длиной входного буфера (байт массива), а затем выполните следующие действия:
- отслеживать положение в буфере вручную
- Append имеющиеся данные к нему через
SerialPort.Read(buffer, position, byteCount)
- пытаются разобрать столько сообщений, сколько возможно из буфера
- скопировать остальное во временный буфер
- сброс входного буфера
- скопировать содержимое временного буфера исходного буфера
- установить позицию в буфере
Вы можете думать быстрее/легче подходов?
Не рискну ли я потерять байты с помощью 'ReadyByte()'? Как определить, что читать нечего? Почему я предпочитаю «BaseStream.ReadyByte()' over 'Read()'? – Hedge
Это ReadByte(), не готов. Нет риска. Вы используете BaseStream, потому что SerialPort не имеет метода для чтения одного байта, вы можете использовать Read() с * count * of 1, если хотите. BytesToRead сообщает вам, сколько из них доступно. –
и почему вы предпочитаете его читать 'Read (buffer, 0, SerialPort.BytesToRead)'? – Hedge