2009-01-27 8 views
1

J'essaie de lire les données d'un port série Windows via Java. J'ai les bibliothèques de javax.comm et suis capable d'obtenir des données mais pas de données correctes. Lorsque je lis le port dans un tableau d'octets et que je le convertis en texte, j'obtiens une série de caractères mais pas de vraie chaîne de texte. J'ai essayé de spécifier le tableau d'octets comme étant "UTF-8" et "US-ASCII". Est-ce que quelqu'un sait comment extraire du vrai texte?Comment lire du texte à partir d'un port série?

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

la sortie des trois premières lignes ne me laisse pas copier et coller (je suppose parce qu'ils ne sont pas des caractères normaux). Voici la sortie du Hex: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

Je lis un dispositif GPS Hollux qui fait la sortie sous forme de chaîne. Je le sais à coup sûr parce que je l'ai fait en C#.

Les paramètres que j'utilise pour la communication que je connais sont bien des travaux dans l'application C# sont: Vitesse de transmission: 9600 Databits: 8 Bit d'arrêt: 1 parité: aucune

+0

Seigel @ Jon - Je vous remarqué retagging pour nettoyer la balises 'serial' et' port'. Je pense que la balise favorite est en fait 'serial-port'. Merci pour les nettoyages! – mtrw

Répondre

1

Je ne peux pas dire de votre code, mais il semble que vous utilisez java.io.InputStream pour lire l'objet. Vous devez utiliser soit java.io.BufferedReader ou java.io.InputSreamReader.

Il y a plusieurs façons de faire, mais c'est ce que nous utilisons:

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

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

Il est probable que le périphérique connecté n'utilise pas de protocole de texte. De nombreux périphériques utilisent un format de message binaire dans lequel du texte peut être incorporé, mais représente d'autres informations avec des codes plus compacts.

Veuillez éditer votre question et fournir plus d'informations, telles que l'appareil avec lequel vous communiquez via le port série, et la sortie que vous obtenez du code que vous avez en cours d'exécution. Une autre sortie utile à ajouter serait quelque chose qui imprime une représentation hexadécimale des données que vous avez lues. Une méthode rapide et sale pour c'est le suivant:

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

Je n'ai pas travaillé avec Holux GPS, mais je l'ai écrit une interface Garmin avec javax.comm. Dans ce cas, l'unité utilise un protocole Garmin propriétaire (binaire) par défaut, mais le protocole NMEA 0183 (basé sur le texte) peut être activé sur le périphérique. Est-il possible que vous receviez un format de message Holux propriétaire, et devez utiliser une commande sur l'unité GPS pour changer de protocole?

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

me plaisez à la chaîne de binaire

Questions connexes