Archivos Binarios

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 3

Segn Santa Wikipedia: Un archivo binario es un archivo informtico que contiene informacin

de cualquier tipo codificada en binario para el propsito de almacenamiento y procesamiento en


ordenadores.
Para escribir y leer archivos binarios desde java se
utiliza ObjectOutputStreamy ObjectInputStream respectivamente, pero el objeto que
guardemos debe ser serializable, esto quiere decir que se puedan guardar como
datos, por ejemplo en la siguiente clase MiClase se implementa SERIALIZABLE,
ademas de utilizarse la variable serialversionUID, esta variable sirve para identificar
el objeto guardado en archivo, ms o menos como una llave de identificacin,
veremos un ejemplo de esto ms adelante.
import java.io.Serializable;
/**
* @web http://www.jc-mouse.net
* @author Mouse
*/
public class MiClase implements Serializable {

//Esta variable es para identificar el archivo cuando lo vayamos a reconstruir del *.DAT
private static final long serialVersionUID = 666L;
//Para guardar el nombre de objeto de la clase
private String Nombre_Objeto="";

/* Constructor de la clase */
public MiClase(String Nombre){
this.Nombre_Objeto = Nombre;
}

public String getNombreObjeto()
{
return this.Nombre_Objeto;
}
//algunos metodos
public int Suma(int a , int b)
{
return a + b;
}

public int Resta(int a , int b)
{
return a - b;
}
}


Una vez que tenemos la clase serializable, debemos crear una clase para guardar y
leer este archivo binario, la siguiente clase la llame BITS (puede ser cualquier otro
nombre), esta clase cuenta con dos mtodos (escribir/leer) los cuales no creo que
deba explicar para que sirven :/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* @web http://www.jc-mouse.net
* @author Mouse
*/
public class bits {

private String ruta_archivo = "e:/temporal/archivo.dat";

public void escribir()
{
try {
//Objeto a guardar en archivo *.DAT
MiClase clase = new MiClase("Mi Objeto en DAT");
//Se crea un Stream para guardar archivo
ObjectOutputStream file = new ObjectOutputStream(new FileOutputStream(
this.ruta_archivo ));
//Se escribe el objeto en archivo
file.writeObject(clase);
//se cierra archivo
file.close();
} catch (IOException ex) {
System.out.println(ex);
}
}

public void leer()
{
try {
//Stream para leer archivo
ObjectInputStream file = new ObjectInputStream(new FileInputStream(
this.ruta_archivo ));
//Se lee el objeto de archivo y este debe convertirse al tipo de clase que corresponde
MiClase clase = (MiClase) file.readObject();
//se cierra archivo
file.close();
//Se utilizan metodos de la clase asi como variables guardados en el objeto
System.out.println("El objeto se llama:" + clase.getNombreObjeto() );
String res = String.valueOf(clase.Suma(234, 12)) ;
System.out.println("La suma de 3 + 12 es igual a : " + res);
} catch (ClassNotFoundException ex) {
System.out.println(ex);
} catch (IOException ex) {
System.out.println(ex);
}
}

}




Implementamos primero el metodo escribir y vemos que pasa:
public static void main(String[] args) {
bits b = new bits();
b.escribir();
}
Nos creara un archivo *.dat en la ruta que esta en la variable ruta_archivo, el
contenido de este archivo sera la clase MiClase, si lo abres con un editor
hexadecimal, podras ver como est guardado ese objeto en el archivo binario.




Ahora implementamos el metodo leer y vemos que pasa:
public static void main(String[] args) {
bits b = new bits();
b.leer();
}
En consola podremos el resultado de la ejecucin, vemos como recuperamos la
variable guardada, as como tambin hacemos uso de uno de los mtodos de la
clase
run:
El objeto se llama:Mi Objeto en DAT
La suma de 3 + 12 es igual a : 246
serialversionUID
Ahora veremos que pasa cuando la variable serialversionUID no es el mismo,
intenta cambiando nuestra variable que es 666L por otra cualquier, nose 777L y
ejecuta el metodo leer(), obtendremos un error:
java.io.InvalidClassException: binarios.MiClase; local class incompatible: stream
classdesc serialVersionUID = 666, local class serialVersionUID = 777

Este error te indica que al momento de leer y tratar de restaurar nuestra clase,
hace una comparacin del SeriaVersion y como no son iguales, da por hecho que el
archivo es incorrecto o esta daado y no lo restaura

También podría gustarte