La Web del Programador: Comunidad de Programadores
 
    Pregunta:  61473 - PROBLEMA CON ENVIAR DATOS POR EL PUERTO SERIAL
Autor:  Paulina Pozo
Hola, mi problema es el siguiente. Estoy tratando de comunicarme con un equipo por el puerto serial. Hice un programa en java bajo Mandriva para enviarle un comando que lo ponga a funcionar. El puerto serial se abre y mi programa le envia el comando que lo lee de un archivo, y si lo envia, pero el equipo no lo reconoce. Probé enviarlo desde un programa llamado minicom que es similar a hyperterminal usando como protocolo ASCII y si reconoce el comando y hace lo que debe hacer. Tengo entendido que mi código le envia al equipo información en forma de bytes. Quiero transformarlo a código ASCII para ver si me funciona. Mi código es el siguiente:

if (!entrada) {
try {
mensajeEnviar=envioArchivo(mensaje);// La variable mensajeEnviar es de tipo String
salida.write(mensajeEnviar.getBytes());// La variable salida es de tipo OutpuStream y envía bytes
cerrar();
} catch (IOException e) {

  Respuesta:  Alex .
Hola Paulina, sólo se un pokito de java, así que te cuento lo que se:

La clase String tiene un constructor al que le puedes indicar el tipo de código con el que quieres leer los bytes de entrada para guardarlo en el objeto String.

new String (byte[ ] bytes, String enc);

El array de bytes lo puedes obtener aplicando el método que usas, getBytes() (de la clase String) sobre un String, por ejemplo al de entrada de un readline() .... y "enc" es el nombre del codigo, ("ASCII", "UTF8", etc ..) .. y cuidado con el nombre del código, porque por ejemplo igual debes poner "UTF8" ó "UTF-8".

También puedes conocer el tipo de código que usa tu máquina por defecto, así:

System.out.println(System.getProperty("file.encoding"));

... y puedes cambiárselo:

System.setProperty("file.encoding", "ISO-8859-1");

En cuanto a lo de enviar diréctamente la información en forma de código ASCII a la máquina, pues no se si se puede hacer eso así, pues que yo sepa los códigos o codificaciones son tablas que asocian un número (expresado en decimal, hexadecimal o binario) a cada caracter, y que se hicieron para traducir el lenguaje de la máquina (bytes) al lenguaje humano (caracteres), y como tenemos múltiples idiomas por eso hay distintás tablas de cógigos, claro ... y por todo esto entiendo que la comunicación entre máquinas debe ser a nivel de bytes y no de caracteres diréctamente, y por eso cada máquina deberá tener su forma de traducir esos bytes a caracteres, tanto para enviar como para recibir la información y mostrarla en pantalla.

... espero haberte ayudado.

un saludo.