我正在与通过 Wifi 将数据流式传输到我的应用程序的硬件设备进行交互。数据流的很好。数据包含一个字符标题 (DATA:),表示新记录已开始。问题是我收到的数据不一定落在标题边界上,所以我必须捕获数据,直到我捕获的数据包含标题。然后,标题之前的所有内容都会进入上一个记录,而它之后的所有内容都会进入新记录。我有这个工作,但想知道是否有人以前做过这个并且有一个很好的计算机科学方法来解决这个问题。
这就是我所做的:
将当前读取的 NSData 转换为 NSString
将 NSString 附加到占位符字符串
检查标题的占位符字符串 (DATA:)。如果标题不存在,则等待下一次读取。
如果标头存在,则将其前面的任何内容附加到先前的记录占位符,并将该占位符作为完整记录传递给数组,我可以进一步解析为字段。
获取标题之后显示的任何内容并将其放在记录占位符中,以便可以在下一次读取时将其附加到。重复步骤 3 - 5。
如果您发现此方法有任何缺陷或有更好的方法建议,请告诉我。
似乎应该有一些设计模式,但我想不出一个。
谢谢。
更新:这是一些代码:
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[data appendBytes:(const void *)buf length:len];
int bytesRead;
bytesRead += len;
} else {
NSLog(@"No data.");
}
那么如何更改此代码以实现有限状态机?