2. Serialización
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.
En Java, esta capacidad de
serialización, es decir,
de guardar información
sobre un objeto para luego
recuperarla, se llama persistencia.
3. 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.
Si se trata de serializar un objeto que no implementa
la interfaz Serializable se producirá una
NotSerializableException al ejecutar el programa.
4. Para utilizar correctamente
Serializable
Hay que tener en cuenta que lo que se serializa 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.
Supongamos que se desea serializar un objeto que
contiene una referencia a una instancia de una clase que no
es serializable, esto produciría una Excepción, para
evitarla, debemos marcar esa instancia como transient.
Todos los campos marcados como transient serán
ignorados por la JVM en el proceso de serialización.
5. La interface ObjectInput
La interface ObjectInput extiende de DataInput, para
incluir la lectura de objetos.
Object readObject() : lee y retorna el objeto leído
6. La interface ObjectOutput
La interface ObjectOutput extiende de
DataOutput, para incluir la escritura de objetos.
void writeObject( Object obj) : escribe el objeto
obj en el flujo de salida.
7. Flujos para entrada y salida de
objetos
La serialización está orientada a bytes por lo tanto se
utilizan clases que esten en la jerarquía de
InputStream u OutputStream.
Para serializar un objeto es necesario crear algun
objeto del tipo OutputStream que se le pasará al
constructor de
ObjectOutputStream.
Luego se llama a writeObject()
para serializar el objeto.
8. Para recuperar un objeto es
necesario crear algún
objeto del tipo InputStream
que se le pasará al
constructor
ObjectInputStream luego
se llama a readObject()
para leer el objeto.