Я написал прослушиватель событий, которые предполагают, что любые сообщения определенного типа получат сообщение от получателя.catching <CR><LF> в массиве байтов
вот мое событие Слушатель:
class SerialPortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
try {
byte[] buffer = SP.readBytes(6);
String type = new String(buffer);
if (type.equals("$GPGGA")){
String line = "";
line = line + type;
buffer = SP.readBytes(66);
String values = new String(buffer);
line = line + values;
writer.write(line + "\n");
}
}
catch (SerialPortException ex) {System.out.println(ex);}
catch (IOException ex) {System.out.println(ex);}
}
}
}
сейчас после того, как я проверить, что сообщение правильного типа я только что прочитал 80 байт от данных, что примерно размер сообщения. однако, иногда сообщение не заполнено и там для него короче, чем обычно. это структура сообщения:
как вы можете видеть, в конце сообщения s с <CR><FL>
. Я хотел бы изменить свой метод, чтобы он читал каждый байт за раз и прекратил чтение, когда он попал в конец сообщения. как я могу поймать <CR><FL>
внутри массива байтов?
любая помощь будет оценена. Спасибо.
Какой тип 'SP'? Если это InputStream, вы можете обернуть его в [BufferedReader] (https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()) и вызвать readLine? – Fildor
SP - это последовательный порт. этот метод является частью более крупной программы, которая связывается с приемником gps через последовательный порт. Я не могу вызвать readLine, потому что данные передаются из приемника в виде байтов. –