Frage

Ich versuche, Daten aus einer Windows-seriellen Schnittstelle durch Java zu lesen. Ich habe die javax.comm Bibliotheken und bin in der Lage, einige Daten zu erhalten, aber nicht korrekte Daten. Wenn ich den Port in ein Byte-Array lesen und wandeln sie in Text erhalte ich eine Reihe von Zeichen, aber keine wirkliche Textzeichenfolge. Ich habe versucht, als beide „UTF-8“ und „US-ASCII“ den Byte-Array angeben. Weiß jemand, wie real Text, um aus dem?

Hier ist mein Code:

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"));

die Ausgabe der ersten drei Zeilen wird mich kopieren und einfügen nicht lassen (ich nehme an, weil sie nicht normale Zeichen sind). Hier ist die Ausgabe des Hex: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

Ich lese von einem Hollux GPS-Gerät die Ausgabe im String-Format der Fall ist. Ich weiß, das sicher, weil ich es durch C # getan hat.

Die Einstellungen, die ich verwende für die Kommunikation, die ich kenne, ist rechts von der Arbeit in den C # app ist: Baud-Rate: 9600 Databits: 8 Stoppbit: 1 Parität: kein

War es hilfreich?

Lösung

Ich kann nicht aus dem Code sagen, aber es sieht aus wie Sie java.io.InputStream verwenden um das Objekt zu lesen. Sie sollten entweder java.io.BufferedReader oder java.io.InputSreamReader verwenden.

Es gibt viele Möglichkeiten, dies zu tun, aber das ist, was wir verwenden:

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

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

Andere Tipps

Es ist wahrscheinlich, dass das angeschlossene Gerät keinen Text Protokoll nicht verwendet. Viele Geräte verwenden ein binäres Nachrichtenformat, das Text in sie eingebettet haben kann, stellt aber andere Informationen mit kompakteren Codes.

Bitte bearbeiten Sie Ihre Frage und weitere Informationen, wie das Gerät zur Verfügung stellen, die Sie die serielle Schnittstelle kommuniziert sind mit durch, und die Ausgabe, die Sie aus dem Code erhalten Sie laufen. Eine weitere hilfreiche Ausgabe wäre hinzuzufügen, etwas, das eine hexadezimale Darstellung der Daten drucken Sie gelesen haben. Eine schnelle und unsaubere Methode dafür ist die folgende:

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

Ich habe nicht mit Holux GPS gearbeitet, aber ich habe eine Garmin-Schnittstelle mit javax.comm geschrieben. In diesem Fall verwendet das Gerät ein proprietäres (binär) Garmin Protokoll standardmäßig, aber das (textbasierten) NMEA 0183-Protokoll kann auf dem Gerät aktiviert werden. Ist es möglich, dass Sie ein proprietäres Holux Nachrichtenformat erhalten, und müssen einige Befehle auf dem GPS-Gerät verwenden, Protokolle zu wechseln?

 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+ "    ");

Bitte mich Zeichenfolge aus binären

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top