Proceso de serialización

La serialización es un proceso por el que un objeto cualquiera se puede convertir en una secuencia de bytes con la que más tarde se podrá reconstruir dicho objeto manteniendo el valor de sus variables. Esto permite guardar un objeto en un archivo o mandarlo por la red.

Para que una clase pueda utilizar la serialización, debe implementar la interface Serializable, que no define ningún método. Casi todas las clases estándar de Java son serializables. La clase MiClase se podría serializar declarándola como:

public class MiClase implements Serializable { }

Para escribir y leer objetos se utilizan las clases ObjectInputStream y ObjectOutputStream, que cuentan con los métodos writeObject() y readObject(). Por ejemplo:

ObjectOutputStream objout = new ObjectOutputStream(new FileOutputStream(«archivo.x»)); String s = new String(«Me van a serializar»);
objout.writeObject(s);
ObjectInputStream objin = new ObjectInputStream(new FileInputStream(«archivo.x»)); String s2 = (String)objin.readObject();

Es importante tener en cuenta que readObject() devuelve un Object sobre el que se deberá hacer un casting para que el objeto sea útil. La reconstrucción necesita que el archivo *.class esté al alcance del programa (como mínimo para hacer este casting).

Al serializar un objeto, automáticamente se serializan todas sus variables y objetos miembro. A su vez se serializan los que estos objetos miembro puedan tener (todos deben ser serializables). También se reconstruyen de igual manera. Si se serializa un Vector que contiene varios Strings, todo ello se convierte en una serie de bytes. Al recuperarlo la reconstrucción deja todo en el lugar en que se guardó.

Si dos objetos contienen una referencia a otro, éste no se duplica si se escriben o leen ambos del mismo stream. Es decir, si el mismo String estuviera contenido dos veces en el Vector, sólo se guardaría una vez y al recuperarlo sólo se crearía un objeto con dos referencias contenidas en el vector.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra