Serializacion en java

5
Serializació n en Java Sebastian Solis

description

Pregunta: Que clases se implementan para utiliza la serializacion y deserializacion de objetos?

Transcript of Serializacion en java

Page 1: Serializacion en java

Serialización en Java

Sebastian Solis

Page 2: Serializacion en java

Serialización de un objeto

Serialización de un objeto: Implementar Serializable• Para que un programa pueda convertir un objeto en un

montón de bytes y pueda luego recuperarlo, el objeto necesita ser Serializable. Al poder convertir el objeto a bytes, ese objeto se puede enviar a través de red, guardarlo en un fichero, y después reconstruirlo al otra lado de la red, leerlo del fichero…

• 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.

Page 3: Serializacion en java

Serialización de un objeto

• Por ejemplo, la clase Datos 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.

• 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.

Page 4: Serializacion en java

Convertir un Serializable a byte[] y

viceversa

• Podemos convertir cualquier objeto Serializable a un array de byte y viceversa.

• Normalmente esto no es necesario que lo hagamos explícitamente en el código para enviar el objeto por un socket o escribirlo en un fichero puesto que contamos con las clases ObjectInputStream y ObjectOutputStream que se encargan de ello.

• Sin embargo, en ocasiones, por ejemplo, al intentar enviar un objeto por un socket udp, sí es necesario hacerlo manualmente.

Page 5: Serializacion en java

Convertir un Serializable a byte[] y

viceversa

• De objeto a byte[]ByteArrayOutputStream bs= new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream (bs); os.writeObject(unObjetoSerializable); // this es de tipo DatoUdp os.close(); byte[] bytes = bs.toByteArray(); // devuelve byte[]

• De byte[] a objetoByteArrayInputStream bs= new ByteArrayInputStream(bytes); // bytes es el byte[] ObjectInputStream is = new ObjectInputStream(bs); ClaseSerializable unObjetoSerializable = (ClaseSerializable)is.readObject(); is.close();