我通过USB串行连接将Arduino板上的JSON对象发送到我PC上的Java应用程序。 java应用程序在串行事件监听器中从串行端口接收“块”。如何使用串行事件侦听器接收JSON对象?
这是听众的身上:
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”调用串口?
我很难过。
Hey ... * *我**正在打字!:)(+1) – 2012-04-10 14:57:13
这里同样的事情。我正在发送一串温度测量值。所以我需要测试每个块是否存在换行符? – ColonelPackage 2012-04-10 15:16:32
出于好奇,您对我创建单独线程的替代方法有何看法,该线程阻止了对“readline”的调用?它是否仍然需要添加换行符?我在想是的。 – ColonelPackage 2012-04-10 16:27:01