我正在使用https://github.com/rm5248/JavaSerial并开发了一个用于从串口写入和读取数据的项目。两者都发生得非常好,但我无法找到信息的最后一个字节并且不会出现。
我们非常感谢任何指示。
portName = currPortId.getName();
// This would be COM1, COM2, etc on Windows
// SerialPort s = new SerialPort(portName);
SerialPort s = new SerialPort("COM1");//, SerialPort.NO_CONTROL_LINE_CHANGE);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
String st = "";
st = "5230" + 31 + String.format("%02X", new Object[] { Integer.valueOf(179) })
+ String.format("%02X", new Object[] { Integer.valueOf(83) });
os.write(hexStringToByteArray(st + "0D"));
System.out.println("Data written");
byte[] dataRead = new byte[753];
int bytesRead = 0;/* = is.read(dataRead); */
while (bytesRead != -1 /*|| dataRead.equals("end")*//*equals("353535")*/) {
/*
* System.out.println("Data in string format is " + new
* String(dataRead, "UTF-8").replace("\n", "").replace("\r",
* "").trim());
*/
// bytesRead = is.read(dataRead);
bytesRead = is.read(dataRead);
Thread.sleep(90L);
System.out.println("bytesRead value is " + bytesRead);
String theString = new String(dataRead, "UTF-8").replace("\n", "").replace("\r", "").trim();
System.out.println("theString value is " + theString);
/*
* sb[0].append(theString); data.add(sb[0].toString()); if
* (dataRead[(dataRead.length - 1)] == 13) {
* data.add(sb[0].toString()); sb[0] = new StringBuilder(); }
*/
data.add(theString);
System.out.println("data value is " + data);
}
我尝试了一些像
这样的事情 while (bytesRead != -1)
while(dataRead.equals("end"))
while(dataRead.equals("353535"))
但没用“
答案 0 :(得分:0)
您从InputStream
返回的SerialPort
遵循与普通InputStream
相同的规则,这意味着is.read()
是阻止呼叫。 is.read()
在输入结束时唯一返回-1的时间是串口关闭。
如果你想要读取正好753个字节,你应该在读完这个字节数后突破你的循环。