我通过 USB 串行连接从 Arduino 板向我的 PC 上的 java 应用程序发送 JSON 对象。Java 应用程序在串行事件侦听器中从串行端口接收“块”。
这是听者的主体:
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
int available = input.available();
byte chunk[] = new byte[available];
input.read(chunk, 0, available);
// buffering of bytes must happen here to
// ultimately de-serialize into JSON object
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
我遇到的问题是不清楚何时收到 JSON 对象的结尾。根据我的研究,需要某种事件导致尝试从串行端口读取返回-1。问题是,在这个模型中,我只有在有数据可供读取时才进入监听器。
我添加了一些代码来检查对 input.read 的调用的返回值,它似乎返回与可用字节数相同的值,并且我还测试了其他事件,但似乎没有其他事件发生。
除非有一种简单的方法可以修改它以检测串行传输的结束,否则我认为这种串行输入模型不适用于接收 JSON 对象之类的东西。
我是否应该转向创建一个单独线程的设计,该线程具有对串行端口的阻塞“readline”调用?
我难住了。