Java - Como Leer un byte nulo de un flujo binario

 
Vista:

Como Leer un byte nulo de un flujo binario

Publicado por Felipe Ortiz (3 intervenciones) el 27/10/2014 18:13:47
Como Leer un byte nulo de un flujo binario, ya que el mismo se encuentra a la mitad del stream que deseo leer. No requiero leer información de un archivo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como Leer un byte nulo de un flujo binario

Publicado por Tom (1831 intervenciones) el 27/10/2014 19:39:37
¿ un "byte nulo" es un byte con valor 0 ? Si es así ¿ qué problema tienes, concretamente ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como Leer un byte nulo de un flujo binario

Publicado por Felipe Ortiz (3 intervenciones) el 28/10/2014 01:46:52
Hola.

Gracias por contestar:

Comento: estoy leyendo el flujo : stx, nulo, etx,P,etx,etx.

Si lo grabo en archivo, lo puedo leer sin ningún problema.
1
2
3
4
5
6
7
8
9
10
try {
            fis = new FileInputStream("datos.dat");
            entrada = new DataInputStream(fis);
 
            System.out.println("Bytes Disponible " + entrada.available());
            while(entrada.available() > 0 ) {
            	int dato = entrada.read();
            	System.out.print(dato + "=" + (char) dato + ":");
		  		cadena = cadena + (char) dato;
            }

Pero lo que necesito es leer esto mismo como un flujo binario sin grabarlo a un archivo.

En otras palabras si laboro con un puerto, puedo escribir los caracteres al dispositivo sin ningún problema , al momento de leer la respuesta tengo que recibir : stx, nulo, etx,P,etx,etx , termina la lectura cuando lee el nulo con un flujo de 2 bytes.

La cadena que mando a escribir es: stx, nulo, etx, S, etx,etx y el dispositivo responde bien.

¿Alguna Sugerencia?

Gracias por el tiempo para responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como Leer un byte nulo de un flujo binario

Publicado por Tom (1831 intervenciones) el 28/10/2014 12:06:21
pon el código que usas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como Leer un byte nulo de un flujo binario

Publicado por Felipe Ortiz (3 intervenciones) el 28/10/2014 17:02:02
Hola.

Este es el código del socket con lo que simulo la lectura del puerto.

package SocketsTest;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ConectorSock {
ServerSocket servidor;
Socket socket;
int puerto=9000;
DataOutputStream salida;
DataInputStream entrada;

public static final char inicio = 2; // Inicio de Archivo ( STX )
public static final char cero = 0; // Byte en Cero
public static final char fin = 3; // Fin de Archivo ( ETX )

public void iniciar(){
try {
servidor = new ServerSocket(puerto);
socket = new Socket();
socket = servidor.accept();

entrada = new DataInputStream(socket.getInputStream());
byte[] buffer = new byte[1024];
String buffer_string;
String cadena="";
int data, cuenta=0;
Thread.sleep(5000);
System.out.println("Entro al método de leer " + entrada.available());
try
{
int len = 0;
boolean sigue = true;
int contar = 0;

while ( entrada.available() > 0 )
{
int nbyte = entrada.readByte();
System.out.println(nbyte + " --- " + (char) nbyte);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (nbyte==13) {
// entrada.skip(1);
}

/*
if ( data == '\n' ) {
break;
}

}


}
catch ( IOException e )
{
e.printStackTrace();
System.out.println("Hubo excepción");
System.exit(-1);
}

salida = new DataOutputStream(socket.getOutputStream());
char longitud=3;
char lrc = 3;
String serialMessage = Character.toString(inicio) + Character.toString(cero ) + Character.toString(longitud) + "S" + Character.toString(fin) + Character.toString(lrc);
salida.write(serialMessage.getBytes());
salida.writeUTF("Prueba con Sockets");
socket.close();
}catch(Exception ex) {}
}
}

-----------------------------------------------------------------------------------------------------------------------------------------

Esta es la clase principal para ejecutar el socket

package SocketsTest;

public class EjecSocket {

public static void main(String[] args) {
ConectorSock con = new ConectorSock();
con.iniciar();
}

}


Uso el Hypertrm para pasarle el contenido binario del archivo .dat y leer información.

Este es el código para grabar a binario:

package archivos;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Binarios1 {
public static final char uno = 1;
public static final char inicio = 2; // Inicio de Archivo ( STX )
public static final char cero = 0; // Byte en Cero
public static final char fin = 3; // Fin de Archivo ( ETX )
public static final char longitud=3;
public static final char lrc = 3;

public static void main(String[] args) {


String serialMessage = Character.toString(inicio) + Character.toString(cero ) + Character.toString(longitud) + "P" + Character.toString(fin) + Character.toString(lrc);
// String serialMessage = Character.toString(inicio) + Character.toString(uno) + Character.toString(longitud) + "P" + Character.toString(fin) + Character.toString(lrc);

FileOutputStream fos = null;
DataOutputStream salida = null;
int n;

try {
fos = new FileOutputStream("datos1.dat");
salida = new DataOutputStream(fos);
salida.write(serialMessage.getBytes());
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
if (fos != null) {
fos.close();
}
if (salida != null) {
salida.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}

}


Gracias por tu tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar