Вы можете добавить прослушиватель к SerialPort, который получает уведомление, когда данные доступны на этом порту.Внутри этого обратного вызова in.available()
также должен возвращать количество байтов, которые могут быть прочитаны, но, вероятно, лучше просто использовать байты, пока read
не вернет -1.
final CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");
final SerialPort com1 = (SerialPort)portId.open("Test", 1000);
final InputStream in = com1.getInputStream();
com1.notifyOnDataAvailable(true);
com1.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
com1.addEventListener(new SerialPortEventListener() {
public void serialEvent(SerialPortEvent event) {
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
byte[] buffer = new byte[4096];
int len;
while (-1 != (len = in.read(buffer))) {
// do something with buffer[0..len]
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});