我正在使用Hyperterminal来读取传感器的输入。 该传感器发出一个应该在表格中的字符串 值6位数或5位数和小数点(但它可以是2个空格,然后是3个数字和1个小数) 标签分隔符 测量单位(“Ci”,“mCi”等) 标签分隔符 字符串例如(F-18或C-11) 标签分隔符 tab CRLF字符串结束标识符。
如果我通过Hyper终端监听此输入它完全读取
0.00 kBq F-18 2D
然而,当我读到它时,我大部分时间都会得到字符串的断段,有时我会得到正确的字符串,我可以得到的一个例子如下所示。
0.00 k□□□□□□□□□□□□□
Bq F-18 2D□□□□□□□□□
0.00 kBq F-18 □□□
0.002D
□□□□□□□□□□
我使用的代码来自RXTX库。
public void serialEvent (SerialPortEvent event){
if (event.getEventType()== SerialPortEvent.DATA_AVAILABLE){
byte[] readBuffer = new byte[19];
try{
while (inputStream.available() > 0){
int numBytes = inputStream.read(readBuffer);
}
catch (IOException e) {}
input_line = new String (readBuffer);
inter.update(input_line);}}
答案 0 :(得分:1)
这是设计的。您假设您将从Read()调用中获得所有字节。这不是它的工作原理,它只会给你到目前为止收到的字节数。这也发生在Hyperterminal,但是你从来没有注意到,因为你的眼睛不那么快。
您需要在方法之外移动readBuffer并逐步填充它,直到您收到完整的响应。然后处理它。
如果设备只发送简单的ASCII文本和行终止符,这是常见的,那么调用SerialPort.ReadLine()是确保获得响应中所有字符的好方法。如有必要,请调整NewLine属性。