我通過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