Persistencia en JAVA      Serialización               Carlos Hernando Carasol                   chernando@acm.org         ...
Índice de contenidos Concepto de serialización Serialización en Java Objetos compuestos y complejos Elementos no serializa...
Serialización: concepto “... is the process of converting a data structure or object into a format that can be stored” Wik...
Un ejemplo
Otros ejemplos XML JSON
Usos de la serialización Guardar a f chero            i Transmitir por red RMI En JEE, guardar en la sesión HTTP
Serialización en Java Se utiliza el interfaz Serializable No requiere implementación de ningún tipo Puede utilizarse en “t...
Ejemplo no serializablepublic class Jugador {String nombre;public Jugador(String nombre) {this.nombre = nombre;}public sta...
Ejemplo serializablepublic class Jugador implements Serializable {String nombre;public Jugador(String nombre) {this.nombre...
Objeto → ExteriorObjectOutputStreamoos.writeObject(jugador)Solamente es necesario que jugadorimplemente Serializable
Exterior → ObjetoObjectInputStreamJugador jugador = (Jugador) ois.readObject()Es necesario que jugador implementeSerializa...
Ejemplotry {FileOutputStream fos = newFileOutputStream("fichero.bin");ObjectOutputStream oos = new ObjectOutputStream(fos)...
Ejercicio Crear una clase Jugador:   nombre, cadena   vida, entero de 0 a 100   últimaEntrada, fecha con la última vez que...
Serializar un objeto compuesto    Añado la clase Inventario a Jugador:public class Jugador implements Serializable{String ...
Todos han de ser serializablejava.io.WriteAbortedException: writing aborted;java.io.NotSerializableException: Inventario
Solución 1  Nos interesa serializar la estructura  relacionadapublic class Inventario implements Serializable {
Solución 2  No nos interesa serializar la estructura  relacionada:transient Inventario inventario;  Recordatorio: la estru...
Motivos para no serializar El atributo es temporal No tiene atributos, por ejemplo un controlador El atributo no debería s...
Ejercicio Añadir la clase Inventario:   dinero, l oat           f   capacidad, entero con valor por defecto 100   peso, en...
Serializar estructuras complejas En Java los Collections son serializables
Deep / Shallow copy Profundidad de la copia Serializable  Deep   Se realiza una copia de todos los elementos Clone     Sha...
Ejercicio Añadimos la clase Equipo:   nombre, string   cantidad, entero positivo   peso (por unidad), entero positivo Añad...
Ampliar métodos de serializaciónprivate voidwriteObject(java.io.ObjectOutputStream out)    throws IOExceptionprivate voidr...
Ejemploprivate void readObject(ObjectInputStream in) throwsIOException,ClassNotFoundException {in.defaultReadObject();// H...
Ejercicio Calcular el peso del equipo con readObject
Ejercicio Convertir en transient:   Jugador.vida   Inventario.equipo Guardarlos mediante writeObject
Limitar la serialización    Sobrescribir los métodos provocando    excepcionesprivate void writeObject(ObjectOutputStream ...
Problemas de la serialización Cambios en la clase   Por ejemplo añadir/eliminar un campo Para guardar no hay problema Al r...
serialVersionUID  La solución consiste en identif car la clase                                 i  Utilizamos serialver o E...
Otros uso de la serialización RMI En BBDD Criptografía
Ejemplo de Cripto FileOutputStream fos = new FileOutputStream("out.des"); BufferedOutputStream bos = new BufferedOutputStr...
Más información Discover the secrets of the Java Serialization API   http://java.sun.com/developer/technicalArticles/Progr...
Caso práctico
Objetivo del caso Fijar los conocimientos de cada técnica Comprobar las diferencias entre ellas
Especificaciones generales Debe posibilitar la visualización y edición de datos. Debido a su evolución es recomendable uti...
Gestor de Tareas Tarea                 Notas   Descripción          Una persona   Fecha de registro    puede tener        ...
Diseño orientativo
Resumen de Serialización Ventajas:            Desventajas:   Sencillo            Rudimentario   Sin dependencias    Sufre ...
Upcoming SlideShare
Loading in...5
×

Persistencia en Java - Serialización

16,500

Published on

Curso (y ejercicios) del uso de la serialización como técnica de persistencia en Java.

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
16,500
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
169
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Persistencia en Java - Serialización

  1. 1. Persistencia en JAVA Serialización Carlos Hernando Carasol chernando@acm.org 5 de Mayo de 2011
  2. 2. Índice de contenidos Concepto de serialización Serialización en Java Objetos compuestos y complejos Elementos no serializables Extendiendo serialización Limitaciones
  3. 3. Serialización: concepto “... is the process of converting a data structure or object into a format that can be stored” Wikipedia Aplanar estructuras … en un formato que pueda reconstruir
  4. 4. Un ejemplo
  5. 5. Otros ejemplos XML JSON
  6. 6. Usos de la serialización Guardar a f chero i Transmitir por red RMI En JEE, guardar en la sesión HTTP
  7. 7. Serialización en Java Se utiliza el interfaz Serializable No requiere implementación de ningún tipo Puede utilizarse en “todas” las clases Recordatorio: implements también se hereda Las principales clases de Java ya son serializables.
  8. 8. Ejemplo no serializablepublic class Jugador {String nombre;public Jugador(String nombre) {this.nombre = nombre;}public static void main(String[] args) {Jugador jugador = new Jugador("Carlos");System.out.println(jugador.nombre);}}
  9. 9. Ejemplo serializablepublic class Jugador implements Serializable {String nombre;public Jugador(String nombre) {this.nombre = nombre;}public static void main(String[] args) {Jugador jugador = new Jugador("Carlos");System.out.println(jugador.nombre);}}
  10. 10. Objeto → ExteriorObjectOutputStreamoos.writeObject(jugador)Solamente es necesario que jugadorimplemente Serializable
  11. 11. Exterior → ObjetoObjectInputStreamJugador jugador = (Jugador) ois.readObject()Es necesario que jugador implementeSerializableEs necesario realizar una conversión
  12. 12. Ejemplotry {FileOutputStream fos = newFileOutputStream("fichero.bin");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(jugador);} catch (FileNotFoundException e) {// TODO Auto-generated catch block} catch (IOException e) {// TODO Auto-generated catch block}
  13. 13. Ejercicio Crear una clase Jugador: nombre, cadena vida, entero de 0 a 100 últimaEntrada, fecha con la última vez que guardo Crear un programa (no es necesario UI): Si hay jugador guardado, recuperar (preguntar) Si no hay, crear uno (podéis pedir datos) Mostrar datos, guardar y salir
  14. 14. Serializar un objeto compuesto Añado la clase Inventario a Jugador:public class Jugador implements Serializable{String nombre;Inventario inventario;…}
  15. 15. Todos han de ser serializablejava.io.WriteAbortedException: writing aborted;java.io.NotSerializableException: Inventario
  16. 16. Solución 1 Nos interesa serializar la estructura relacionadapublic class Inventario implements Serializable {
  17. 17. Solución 2 No nos interesa serializar la estructura relacionada:transient Inventario inventario; Recordatorio: la estructura se pierde por el camino, al recuperar será Null.
  18. 18. Motivos para no serializar El atributo es temporal No tiene atributos, por ejemplo un controlador El atributo no debería ser persistido, por ejemplo un Thread o un Socket.
  19. 19. Ejercicio Añadir la clase Inventario: dinero, l oat f capacidad, entero con valor por defecto 100 peso, entero de tipo transient Añadir un inventario al jugador. Modif car el programa para: i El jugador parte con dinero 1000.0 Muestre los atributos del Inventario antes de guardar.
  20. 20. Serializar estructuras complejas En Java los Collections son serializables
  21. 21. Deep / Shallow copy Profundidad de la copia Serializable Deep Se realiza una copia de todos los elementos Clone Shallow Se copia la instancia y se referencia el resto
  22. 22. Ejercicio Añadimos la clase Equipo: nombre, string cantidad, entero positivo peso (por unidad), entero positivo Añadimos una lista de equipo al inventario Mostramos la lista de todo el equipo.
  23. 23. Ampliar métodos de serializaciónprivate voidwriteObject(java.io.ObjectOutputStream out) throws IOExceptionprivate voidreadObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException;private void readObjectNoData() throws ObjectStreamException;
  24. 24. Ejemploprivate void readObject(ObjectInputStream in) throwsIOException,ClassNotFoundException {in.defaultReadObject();// Haciendo trampasSystem.out.println("Inventario - dinero: " +this.inventario.dinero);this.inventario.dinero += 100;System.out.println("Inventario - dinero: " +this.inventario.dinero);}
  25. 25. Ejercicio Calcular el peso del equipo con readObject
  26. 26. Ejercicio Convertir en transient: Jugador.vida Inventario.equipo Guardarlos mediante writeObject
  27. 27. Limitar la serialización Sobrescribir los métodos provocando excepcionesprivate void writeObject(ObjectOutputStream out) throwsIOException {throw new NotSerializableException("No!");}private void readObject(ObjectInputStream in) throwsIOException {throw new NotSerializableException("No!");
  28. 28. Problemas de la serialización Cambios en la clase Por ejemplo añadir/eliminar un campo Para guardar no hay problema Al recuperar provocará excepciones: java.io.InvalidClassException
  29. 29. serialVersionUID La solución consiste en identif car la clase i Utilizamos serialver o Eclipsepublic class Jugador implements Serializable {private static final long serialVersionUID =77552270920966258L;
  30. 30. Otros uso de la serialización RMI En BBDD Criptografía
  31. 31. Ejemplo de Cripto FileOutputStream fos = new FileOutputStream("out.des"); BufferedOutputStream bos = new BufferedOutputStream(fos); CipherOutputStream cos = new CipherOutputStream(bos, desCipher); ObjectOutputStream oos = new ObjectOutputStream(cos);
  32. 32. Más información Discover the secrets of the Java Serialization API http://java.sun.com/developer/technicalArticles/Programming/serialization/ Advanced Serialization http://java.sun.com/developer/technicalArticles/ALT/serialization/ Interface Serializable http://download.oracle.com/javase/6/docs/api/java/io/Serializable.html
  33. 33. Caso práctico
  34. 34. Objetivo del caso Fijar los conocimientos de cada técnica Comprobar las diferencias entre ellas
  35. 35. Especificaciones generales Debe posibilitar la visualización y edición de datos. Debido a su evolución es recomendable utilizar un buen diseño
  36. 36. Gestor de Tareas Tarea Notas Descripción Una persona Fecha de registro puede tener múltiples tareas Persona asignada Un proyecto tiene Persona múltiples tareas. Nombre Proyecto Nombre
  37. 37. Diseño orientativo
  38. 38. Resumen de Serialización Ventajas: Desventajas: Sencillo Rudimentario Sin dependencias Sufre con los Inmediato cambios Flexible Sufre con las corrupciones No vale para grandes cantidades de datos
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×