La serialización de objetos en Java consiste en convertir un objeto en una secuencia de bytes para poder guardarlo en un archivo o enviarlo por la red. Para que un objeto sea serializable, debe implementar la interfaz Serializable. Al serializar un objeto, se guarda el estado de sus campos de forma recursiva, incluyendo cualquier objeto anidado. Esto permite reconstruir el objeto original a partir de la secuencia de bytes.
2. SERIALIZACION
La serialización de un objeto consiste en obtener
una secuencia de bytes que represente el estado
de dicho objeto. Esta secuencia puede utilizarse
de varias maneras (puede enviarse a través de la
red, guardarse en un fichero para su uso
posterior, utilizarse para recomponer el objeto
original, etc.).
En Java, esta capacidad de serialización, es
decir, de guardar información sobre un objeto
para luego recuperarla, se llama persistencia.
3. OBJETOS SERIALIZABLES
La serialización consiste en convertir un objeto en una secuencia de
bytes para guardarlo en un archivo o enviarlo por la red, y luego
reconstruirlo, con los valores que tenía al ser serializado, para su
posterior utilización. La serialización es muy utilizada en las bases de
datos relacionales, pero tiene también otras aplicaciones.
Para que un objeto sea serializable, debe implementar la interfaz
java.io.Serializable. Esta interfaz no define ningún método.
Simplemente se usa para 'marcar' aquellas clases cuyas instancias
pueden ser convertidas a secuencias de bytes (y posteriormente
reconstruidas). Objetos tan comunes como String, Vector o ArrayList
implementan Serializable, de modo que pueden ser serializados y
reconstruidos más tarde.
4. ESTADO DE UN OBJETO
El estado de un objeto viene dado, básicamente, por el
estado de sus campos. Así, serializar un objeto consiste,
básicamente, en guardar el estado de sus campos. Si el
objeto a serializar tiene campos que a su vez son objetos,
habrá que serializarlos primero. Éste es un proceso
recursivo que implica la serialización de todo un grafo (en
realidad, un árbol) de objetos.
Además, también se almacena información relativa a
dicho árbol, para poder llevar a cabo la reconstrucción del
objeto serializado.
5. Almacenamiento de Objetos
Es posible utilizar los mecanismos de serialización disponibles para serializar
un objeto guardándolo en un fichero y para realizar el proceso inverso,
recuperándolo desde el fichero.
6. Envió de objetos por la red
También es posible enviar un objeto serializado a través de la red. La
diferencia consiste en que ahora se utilizan streams de distinto tipo.
7. Serialización
Para que un objeto sea serializable basta con que la clase a la que
pertenezca, o una superclase de ésta, implemente la interfaz
Serializable o su subinterfaz Externalizable, ambas en el paquete
java.io.
Ahora bien, para utilizar correctamente Serializable, sin liarla, hay
que tener en cuenta algunos detalles.
Primero, lo que estamos serializando son objetos y sus campos, así
que las variables marcadas como static, es decir, que pertenecen a la
clase y no al objeto, no pueden ser serializadas.
Segundo, supongamos que queremos serializar un objeto que
contiene una referencia a una instancia de una clase que no es
serializable. Esto produciría la ya conocida NotSerializableException.
Para evitarlo, debemos marcar esa instancia como transient.