Este post tiene como objetivo tratar, analizar y discutir la serialización en Java, tanto a nivel de teoría como de práctica.
TEORIA
Para ello, revisemos primero los siguientes conceptos:
-¿Qué es serialización? Se trata del proceso en el cual una instancia de un objeto pasa a ser un flujo de bytes, para poder almacenar su estado de una manera persistente.
-¿Dentro de Java, qué tenemos que hacer para hacer una clase serializable? Dentro de una clase Java, todos los atributos de la misma deben ser serializables, si uno de estso atributos no lo es, e intentamos serializar el objeto, tendremos una excepción en tiempo de ejecución.
-¿Los tipos primitivos son serializables? Todos los tipos primitivos son serializables por definición.
-¿Cómo podemos hacer que una clase sea serializable? Dicha clase debe implementar la interfaz java.io.Serializable.
PRÁCTICA
package classes;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Casa implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public Integer id;
public String direccion;
public Residente residente;
public Casa(Integer id, String direccion, Residente residente) {
super();
this.id = id;
this.direccion = direccion;
this.residente = residente;
}
@Override
public String toString() {
return "Casa [id=" + id + ", direccion=" + direccion + ", residente="
+ residente + "]";
}
public static void main(String args[]) throws FileNotFoundException, IOException{
Casa casa = new Casa(1,"direccion",new Residente("nombre","apellidos"));
File file = new File("serializable.txt");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(casa);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
try {
Casa casaLeida = (Casa)ois.readObject();
System.out.println("Casa Leida" + casaLeida.toString());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Residente implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public String nombre;
public String apellidos;
public Residente(String nombre, String apellidos) {
super();
this.nombre = nombre;
this.apellidos = apellidos;
}
@Override
public String toString() {
return "Residente [nombre=" + nombre + ", apellidos=" + apellidos + "]";
}
}
Siendo la salida:
Casa LeidaCasa [id=1, direccion=direccion, residente=Residente [nombre=nombre, apellidos=apellidos]]
-¿Qué es serialización? Se trata del proceso en el cual una instancia de un objeto pasa a ser un flujo de bytes, para poder almacenar su estado de una manera persistente.