Según Santa Wikipedia: «Un archivo binario es un archivo informático que contiene información de cualquier tipo codificada en binario para el propósito de almacenamiento y procesamiento en ordenadores. «
Para escribir y leer archivos binarios desde java se utiliza ObjectOutputStream y 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, más o menos como una llave de identificación, veremos un ejemplo de esto más adelante.
import java.io.Serializable; /** * @web https://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 métodos (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 https://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 ejecución, vemos como recuperamos la variable guardada, así como también hacemos uso de uno de los métodos 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 comparación del SeriaVersion y como no son iguales, da por hecho que el archivo es incorrecto o esta dañado y no lo restaura
eso es todo 🙂 bájate el proyecto «Archivos Binarios Java»
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Semanas atrás leí un articulo en el que se pensaba implementar los emojis como contraseñas en los dispositivos con andro...
BorderPane es un layout que distribuye los nodos hijos en 5 posiciones TOP, LEFT, BOTTOM, RIGHT y CENTER Los nodos hijos...
Una cola doblemente terminada o deque es una estructura de datos lineal que permite insertar y eliminar elementos por am...
En este post crearemos un swing Label personalizado que tendrá la forma circular en su borde, con esto obtendremos un bo...
En este tutorial crearemos un interesante efecto de explosión al momento de abrir un JPanel, este efecto puede extenders...
Si te gusta realizar tus propios memes o foto montajes pero tienes poca o nula experiencia en editores gráficos como Pho...
Los comentarios estan cerrados
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...
¡Excelente guía! Me fue de mucha ayuda
Muchas gracias 😀
grasias men me ayudo
Muy buuen aporte aora checo que tal va
Hoy me haz ayudado en 5 dudas, asi que:
int i=0
while(i<5)
{
System.out.println("MUCHAS GRACIAS");
i+=1;
}
Adios…
original 🙂 gracias
grsias
Estimado amigo Mouse emprendedor, mil gracia por este muy buen aporte, me sirvió de mucho.