J'ai écrit un écouteur d'événement supposé lire tous les messages d'un type spécifique d'un récepteur.attraper <CR><LF> dans un tableau d'octets
ici est mon écouteur d'événement:
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);}
}
}
}
en ce moment après je vérifie que le message est du type correct, je viens de lire 80 octets de données, ce qui est à peu près la taille du message. Cependant, parfois le message n'est pas plein et là, il est plus court que d'habitude. c'est la structure du message:
comme vous pouvez le voir, s avec <CR><FL>
la fin du message. Je voudrais modifier ma méthode afin qu'elle lise chaque octet à la fois et arrête de lire une fois qu'elle a atteint la fin du message. comment puis-je attraper le <CR><FL>
à l'intérieur du tableau d'octets?
toute aide serait appréciée. Je vous remercie.
Quel type est 'SP'? S'il s'agit d'un InputStream, vous pouvez l'insérer dans un [BufferedReader] (https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()) et appeler readLine? – Fildor
SP est un port série. Cette méthode fait partie d'un programme plus grand qui communique avec un récepteur GPS via un port série. Je ne peux pas appeler readLine car les données circulent depuis le récepteur sous forme d'octets. –