A veces, necesitamos almacenar el estado de una clase para que perdure a través del tiempo. A esta característica se le llama persistencia. Para implementar esto, es necesario que pueda ser almacenada en un archivo y recuperado posteriormente.
El mecanismo que implementa la persistencia se llama serialización.
Al proceso de almacenar el estado de una clase en un archivo se le llama serializar.
Al de recuperarlo después deserializar.
Todos los componentes deben persistir. Para ello, siempre desde el punto de vista Java, deben implementar los interfaces java.io.Serializable
o java.io.Externalizable
que te ofrecen la posibilidad de serialización automática o de programarla según necesidad:
Serialización Automática: el componente implementa la interfaz Serializable que proporciona serialización automática mediante la utilización de las herramientas de Java Object Serialization. Para poder usar la interfaz Serializable debemos tener en cuenta lo siguiente:
- Las clases que implementan
Serializable
deben tener un constructor sin argumentos que será llamado cuando un objeto sea "reconstituido" desde un fichero .ser.
- Todos los campos excepto
static
y transient
son serializados. Utilizaremos el modificador transient
para especificar los campos que no queremos serializar, y para especificar las clases que no son serializables (por ejemplo Image
no lo es).
- Se puede programar una serialización propia si es necesario implementando los siguientes métodos (las firmas deben ser exactas):
private void writeObject(java.io.ObjectOutputStream out) throws IOException;
private void readObject(java.io.ObjectInputStream in) throws IOExcept;
Serialización programada: el componente implementa la interfaz Externalizable
, y sus dos métodos para guardar el componente con un formato específico. Características:
- Precisa de la implementación de los métodos
readExternal ()
y writeExternal ()
.
- Las clases
Externalizable
también deben tener un constructor sin argumentos.
Los componentes que implementarás en esta unidad emplearán la serialización por defecto por lo que debes tener en cuenta lo siguiente:
- La clase debe implementar la interfaz
Serializable
.
- Es obligatorio que exista un constructor sin argumentos.