Domanda

Sto cercando di leggere i dati di una porta seriale di Windows attraverso Java. Ho le librerie javax.comm e sono in grado di ottenere alcuni dati, ma non dati corretti. Quando ho letto la porta in un array di byte e convertirlo in testo ricevo una serie di personaggi, ma non stringa di testo vero e proprio. Ho cercato di specificare la matrice di byte come sia quot &; & UTF-8 quot; & E quot; & US-ASCII quot ;. Qualcuno sa come ottenere il testo vero e proprio da questo?

Qui è il mio codice:

while (inputStream.available() > 0) {
 int numBytes = inputStream.read(readBuffer);
 System.out.println("Reading from " + portId.getName() + ": ");
 System.out.println("Read " + numBytes + " bytes");
}

System.out.println(new String(readBuffer));
System.out.println(new String(readBuffer, "UTF-8"));
System.out.println(new String(readBuffer, "US-ASCII"));

l'uscita delle prime tre righe non mi permette di copiare e incollare (presumo perché non sono caratteri normali). Ecco l'output del Hex: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

Sto leggendo da un dispositivo GPS Hollux che fa output in formato stringa. Lo so per certo perché l'ho fatto attraverso il C #.

Le impostazioni che sto usando per la comunicazione che io conosco sono proprio dal lavoro in C # app sono: Baud Rate: 9600 Databits: 8 bit di stop: 1 parità: nessuno

È stato utile?

Soluzione

Non posso dire dal codice, ma sembra che si sta utilizzando java.io.InputStream per leggere l'oggetto. Si consiglia di utilizzare uno o java.io.BufferedReader java.io.InputSreamReader.

Ci sono molti modi per farlo, ma questo è quello che usiamo:

javax.comm.SerialPort port = ...{initialize your serial port}
BufferedReader portReader = 
    new BufferedReader(new InputStreamReader(port.getInputStream()));

try {
    String line = portReader.readLine();
} catch(IOException e) { ... }

Altri suggerimenti

E 'probabile che il dispositivo collegato non utilizza un protocollo di testo. Molti dispositivi utilizzano un formato di messaggio binario che può avere il testo incorporato in esso, ma rappresenta altre informazioni con codici più compatte.

Si prega di modificare la tua domanda e di fornire ulteriori informazioni, come ad esempio il dispositivo che si sta comunicando con attraverso la porta seriale, e l'uscita che si ottiene dal codice in esecuzione. Un'altra uscita utile aggiungere sarebbe qualcosa che stampa una rappresentazione esadecimale dei dati che hai letto. Un metodo rapido-e-sporco per che è la seguente:

import java.math.BigInteger;
...
System.out.println(new BigInteger(1, readBuffer).toString(16));

Non ho lavorato con il GPS Holux, ma ho scritto un'interfaccia Garmin con javax.comm. In tal caso, l'unità utilizza un proprietario (binario) Garmin protocollo di default, ma il (testuale) NMEA 0183 può essere abilitato sul dispositivo. E 'possibile che si sta ricevendo un formato proprietario messaggio Holux, ed è necessario utilizzare un comando sul l'unità GPS per passare protocolli?

 byte[] readBuffer = null;
                try {
                    while (inputStream.available() > 0) {
                        int n = inputStream.available();
                        readBuffer = new byte[n];
                        inputStream.read(readBuffer, 0, n);
                    }
                    String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
                    String str = new String(readBuffer, "UTF-8");
                    jTextField3.setText("    " + str+ "    ");

mi piacere a stringa da binario

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top