Pregunta

Estoy intentando leer datos de un puerto serie de Windows a través de Java. Tengo las bibliotecas javax.comm y soy capaz de obtener algunos datos, pero no los datos correctos. Cuando leí el puerto en una matriz de bytes y convertirlo en texto consigo una serie de personajes, pero sin cadena de texto real. He tratado de especificar la matriz de bytes que ser a la vez "UTF-8" y "US-ASCII". ¿Alguien sabe cómo conseguir el texto real de salir de esto?

Aquí está mi código:

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 salida de las tres primeras líneas no me deja copiar y pegar (supongo que porque no son caracteres normales). Aquí está la salida de la Hex: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

Estoy leyendo desde un dispositivo GPS, que hace Hollux de salida en formato de cadena. Sé a ciencia cierta porque lo hice a C #.

La configuración que estoy usando para la comunicación, que sé que son la derecha desde el trabajo en la aplicación de C # son los siguientes: Velocidad de transmisión: 9600 Bits de datos: 8 Bit de parada: 1 paridad: ninguna

¿Fue útil?

Solución

No puedo decir de su código, pero parece que está utilizando java.io.InputStream leer el objeto. Debe utilizar ya sea java.io.BufferedReader o java.io.InputSreamReader.

Hay muchas maneras de hacer esto, pero esto es lo que usamos:

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

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

Otros consejos

Es probable que el dispositivo conectado no utiliza un protocolo de texto. Muchos dispositivos usan un formato de mensaje binario que puede tener el texto incrustado en él, sino que representa otra información con códigos más compactos.

Por favor, edite su pregunta y proporcionar más información, como el dispositivo que se está comunicando con través del puerto serie, y la salida que se obtiene a partir del código que se estén ejecutando. Otro resultado útil agregar sería algo que imprime una representación hexadecimal de los datos que ha leído. Un método rápido y sucio-de ello es la siguiente:

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

No he trabajado con Holux GPS, pero he escrito una interfaz de Garmin con javax.comm. En ese caso, la unidad utiliza una (binaria) de protocolo Garmin patentada por defecto, pero el protocolo NMEA (basado en texto) 0183 se puede activar en el dispositivo. ¿Es posible que usted está recibiendo un formato de mensaje de Holux propietaria, y la necesidad de utilizar algunos comandos de la unidad GPS para cambiar los protocolos?

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

complacerme a la cadena de binario

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top