Serializable: serialización de objetos en java

En ocaciones necesitamos almacenar el estado de un objeto dentro de un dispositivo de almacenamiento, pero el manejar el archivo y escribir cada atributo del objeto es una tarea cansada, pero java tiene una clase que nos ayuda a guardar el estado del objeto tal y como lo mantenemos en la ejecución del programa. Esta clase es conocida como Serializable.

Serialización de un objeto

La serialización de un objeto consiste en obtener una trama de bytes que represente el estado de un objeto, donde podrá ser escrito dentro de un archivo, o bien, para ser enviado a través de una red. Una característica importante es que esto hace posible la persistencia de objetos, es decir, el estado de un objeto se almacena para su uso posterior.

¿Qué es Serializable?

Serializable es una clase ubicada en el paquete Java.io.Serializable, la cual no cuenta con ningún método, por lo que es una clase que sirve solamente para especificar que todo el estado de un objeto instanciado podrá ser escrito o enviado en la red como una trama de bytes.

Hay que tomar en cuenta que, si un objeto tiene como atributo otro objeto, entonces se debe declarar ese objeto del tipo Serializable, y estos serán serializados primero. Esto se puede tomar como un árbol, donde las hojas son objetos que forman parte de otro objeto como un atributo, y todos ellos son marcados como serializables, para así entonces serializar primero las hojas del árbol y finalizar con la raíz.

Habrá ocaciones donde querramos exceptuar un atributo del objeto que no querramos serializar, y para esto se encuentra el modificador Transient. Este modificador le indica a la JVM (Java Virtual Machine) que dicho atributo deberá ser excentado de la serialización, en otras palabras, ignorará este atributo.

Los atributos que lleven el modificador Static nunca se tomarán en cuenta al serializar un objeto, ya que este atributo pertenece a la clase y no al objeto.

Ejemplos de serialización

Aquí se muestran ejemplos de cómo debemos implementar serializable dentro de una clase.

 

Notamos que el atributo s_Apellido lleva el modificador Transient, por lo que la JVM no serializará ese dato.

Ahora veamos como usaremos los objetos marcados como Serializable para lectura y escritura en archivos.

Output (Escritura)

 

En este código podemos observar el uso de FileOutputStream y ObjectOutputStream los cuales son clases para escritura dentro de archivos. Dentro de la clase ObjectOutputStream encontramos el método WriteObject, el cual escribe el estado del objeto, como una trama de bytes, dentro del archivo.

Ahora bien, veamos cómo se lee un objeto que ya fue serializado y que se ha escrito en un archivo:

 


En este caso, se hace uso de las clases FileInputStream y ObjectInputStream. La clase ObjectInputStream contiene el método readObject, el cual lee una trama de bytes, que representa el estado de un objeto. Este método retorna un objeto del tipo Object, por lo que debemos convertir el objeto retornado al tipo de objeto que estamos leyendo del archivo.

En este vínculo se puede descargar la presentación: Serializable Java.