Вы находитесь на странице: 1из 14

QUÉ ES LA SERIALIZACIÓN ?

• La serialización de objetos permite convertir cualquier objeto que se implemente


ala interfaz Serializable o ala interfaz Externalizable en una secuencia de bytes
que puede ser utilizada posteriormente para reconstruir el objeto original.

• Esta secuencia de bits puede guardarse en un fichero para reconstruir el objeto


en otro instante.

• Los objetos mantienen referencias a otros objetos. Estos otros objetos deben ser
también almacenados y recuperados con el fin de mantener las relaciones
originales. Por supuesto, todos estos objetos deben ser serializables ya que de lo
contrario se lanzará una excepción del tipo NotSerializableException
OBJETOS SERIALIZABLES:
Un objeto serializable es un objeto que se puede convertir en una secuencia de
bytes.
Para que un objeto sea serializable basta con que implemente la
interfaz Serializable. Como la interfaz Serializable no tiene métodos,
es muy sencillo implementarla, basta con un implements Serializable y
nada más. Por ejemplo, la clase Datos siguiente es Serializable y java sabe
perfectamente enviarla o recibirla por red, a través de socket o de rmi.
También java sabe escribirla en un fichero o reconstruirla a partir del fichero.

public class Datos implements Serializable


{
public int a;
public String b;
public char c;
}
Si dentro de la clase hay atributos que son otras clases, éstos a su vez
también deben ser Serializable. Con los tipos de java (String, Integer,
etc.) no hay problema porque lo son. Si ponemos como atributos nuestras
propias clases, éstas a su vez deben implementar Serializable. x

/* Esta clase es Serializable porque implementa Serializable y todos sus


Campos son Serializable, incluido "Datos f;"
*/

public class DatoGordo implements Serializable


{
public int d;
public Integer e;
Datos f;
}
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
COMO PODEMOS SERIALIZAR UN OBJETO:
Hay dos formas:

 Para para que un objeto sea serializable, ha de implementar la


interfaz java.io.serializable (que lo único que haces es
marcar el objeto como serializable, sin que tengamos que implementar
ningún método).
 Para que un objeto sea serializable, todas sus variables de instancia
han de ser serializables todos los tipos primitivos en java son
serializables por defecto (igual que los arrays y otros muchos tipos
estándar).
ESTADO DE UN OBJETO:

El estado de un objeto viene dado, básicamente, por el estado de sus campos.

• Serializar un objeto consiste en guardar el estado de sus campos.

• Si el objeto a serializar tiene campos que a su vez son objetos, habrá


que serializarlos primero.

• Es un proceso recursivo que implica la serialización de todo un árbol


de objetos.

• También se almacena información relativa a dicho árbol, para poder


llevar a cabo la reconstrucción del objeto serializado.
API Necesarios para Serializar:
La serialización esta orientada a bytes por lo tanto se utilizan clases que estén en la
jerarquía de InputStream u OutputStream.
 Para serializar un objeto es necesario crear algún objeto de tipo OuputStream que
se le pasara al constructor de :

Consiste en construir un flujo de datos, atreves del cual es


ObjectOuputStream posible transferir un objeto desde a dentro asía afuera es
C decir:
(desde el programa java asía un medio de almacenamiento
o asía un ordenador remoto o asía otra fuente de
Luego se llama
almacenamiento desconocida)

Crear ese objeto (esa sujeción de bytes) para lanzarla


writeObject() atreves del flujo de datos hacia afuera.
M
 Para recuperar un objeto es necesario crear algún objeto del tipo InputStream
que se le pasara al constructor:

Crear un flujo de datos, atreves de cual es


ObjectInputStream posible que viaje un objeto pero desde afuera
C asía dentro es decir: (de un objeto remoto asía
dentro de nuestro programa) y luego ya dentro
del programa, recomponer esos bytes que han
Luego se llama entrado en el objeto correspondido

Leer esa sujeción de bytes que nos entra por el


readObject() flujo de datos InputStream asía nuestro
M
programa
Ventajas:
 Un método de persistencia de objetos que es más conveniente que escribir sus
propiedades a un archivo de texto en disco.

 Un método de emisión de llamadas a procedimiento remoto, por ejemplo, SOAP.

 Un método para la distribución de objetos, especialmente en los componentes


software, tales como COM, CORBA, etc.

 Un método para detectar cambios en variables en el tiempo.


Ejemplos de serialización:
Aquí se muestran ejemplos de cómo debemos implementar serializable en una clase:

De esta forma,
declaramos que
todos los objetos
instanciados de
“UnaClase" serán
serializados.

Ahora veamos un
ejemplo sencillo.
Crearemos una clase
llamada Agenda, la
cual será serializable:

Notamos que el
atributo s_Apellido lleva
el modificador Transient,
por lo que la JVM no
serializará ese dato.
Ahora usamos 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 ObjectOutputStre
am 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:

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 Obje,ct, por lo que
debemos convertir el objeto retornado al tipo de objeto que
estamos leyendo del archivo.

Вам также может понравиться