Я читаю данные из (последовательного) порта, используя неблокирующую функцию read () (на C / C ++).Это означает, что данные поступают кусками неопределенного (но сообщаемого) размера (включая 0) каждый раз, когда я «опрашиваю» порт.Затем мне нужно проанализировать этот «поток» для определенных шаблонов (не XML).
Моя наивная реализация объединяет новую строку с предыдущей строкой потока каждый раз, когда read () возвращает ненулевой буфер, и повторноразбирает всю строку.Когда шаблон сопоставляется, соответствующая часть отбрасывается, оставляя только хвост строки в следующий раз.
Очевидно, что есть гораздо более эффективный способ сделать это, например, инкрементальный синтаксический анализ SAX,буферы типа deque или подобные строковые фрагменты и т. д. Кроме того, очевидно, я не первый, кто должен выполнять такой тип анализа потока.Предотвращение переполнения памяти в случае отсутствия совпадений с шаблоном также будет большим плюсом.
Спасибо, Ади