我正在使用超级终端读取来自传感器的输入。此传感器发出的字符串格式应为值6位或5位和一个小数点(但它可以是2个空格,然后是3个数字和一个小数)制表符分隔符测量单元(“Ci”、"mCi“等)制表符分隔符字符串例如(F-18或C-11)制表符分隔符制表符CRLF字符串结束标识符。
如果我通过超级终端监视这个输入,它会完美地读取它
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);}} 发布于 2012-10-25 21:50:09
这是设计好的。假设您将从Read()调用中获得所有字节。这不是它的工作方式,它只会给你到目前为止已经收到的字节数。这在超级终端中也会发生,但你永远不会注意到,因为你的眼睛不是那么快。
您需要将readBuffer移到方法之外,并逐步填充它,直到收到完整的响应。然后处理它。
如果设备只发送简单的ASCII文本和行终止符,这很常见,那么调用SerialPort.ReadLine()是确保获得响应中所有字符的好方法。如有必要,调整NewLine属性。
https://stackoverflow.com/questions/13069948
复制相似问题