【发布时间】:2011-03-15 13:31:50
【问题描述】:
我正在使用非阻塞 read() 函数(在 C/C++ 中)从(串行)端口读取数据。 这意味着每次我“轮询”端口时,数据都会以未确定(但已报告)大小(包括 0)的块进入。然后我需要为某些模式(不是 XML)解析这个“流”。
每次 read() 返回非零缓冲区时,我的幼稚实现将新字符串连接到前一个流字符串,并重新解析整个字符串。 当模式匹配时,相关部分被丢弃,只留下字符串的尾部。
显然有更有效的方法可以做到这一点,例如,增量解析 a-la SAX、类似双端队列的缓冲区或类似的字符串切片等。 另外,很明显,我不是第一个必须进行这种类型的流解析的人。
有没有人知道任何图书馆已经在做这种事情? 在缺少模式匹配的情况下防止内存溢出也是一大优势。
谢谢, 阿迪
【问题讨论】:
-
你需要做什么样的模式匹配?
-
我必须支持几种不同的设备,所以我想要一个更通用的解析器。目前,我查找页眉字符串和页脚字符串并返回此“句子”以供以后进行额外解析。实际上,我希望有一个更通用的解析器,例如正则表达式。
标签: c++ parsing stream nonblocking