SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Persistencia en JAVA
      Serialización




               Carlos Hernando Carasol
                   chernando@acm.org
                     5 de Mayo de 2011
Índice de contenidos
 Concepto de serialización
 Serialización en Java
 Objetos compuestos y complejos
 Elementos no serializables
 Extendiendo serialización
 Limitaciones
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
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 “todas” las clases
   Recordatorio: implements también se hereda
 Las principales clases de Java ya son
 serializables.
Ejemplo no serializable
public 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);
}
}
Ejemplo serializable
public 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);
}
}
Objeto → Exterior
ObjectOutputStream
oos.writeObject(jugador)
Solamente es necesario que jugador
implemente Serializable
Exterior → Objeto
ObjectInputStream
Jugador jugador =
 (Jugador) ois.readObject()
Es necesario que jugador implemente
Serializable
Es necesario realizar una conversión
Ejemplo
try {
FileOutputStream fos = new
FileOutputStream("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
}
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
Serializar un objeto compuesto
    Añado la clase Inventario a Jugador:
public class Jugador implements Serializable{
String nombre;
Inventario inventario;
…
}
Todos han de ser serializable
java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException: Inventario
Solución 1
  Nos interesa serializar la estructura
  relacionada
public class Inventario implements Serializable {
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.
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.
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.
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     Shallow
   Se copia la instancia y se referencia el resto
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.
Ampliar métodos de serialización
private void
writeObject(java.io.ObjectOutputStream out)
    throws IOException
private void
readObject(java.io.ObjectInputStream in)
    throws IOException,
ClassNotFoundException;
private void readObjectNoData()
    throws ObjectStreamException;
Ejemplo
private void readObject(ObjectInputStream in) throws
IOException,
ClassNotFoundException {
in.defaultReadObject();
// Haciendo trampas
System.out.println("Inventario - dinero: " +
this.inventario.dinero);
this.inventario.dinero += 100;
System.out.println("Inventario - dinero: " +
this.inventario.dinero);
}
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
    excepciones
private void writeObject(ObjectOutputStream out) throws
IOException {
throw new NotSerializableException("No!");
}


private void readObject(ObjectInputStream in) throws
IOException {
throw new NotSerializableException("No!");
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
serialVersionUID
  La solución consiste en identif car la clase
                                 i
  Utilizamos serialver o Eclipse
public class Jugador implements Serializable {


private static final long serialVersionUID =
77552270920966258L;
Otros uso de la serialización
 RMI
 En BBDD
 Criptografía
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);
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
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
 utilizar un buen diseño
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
Diseño orientativo
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

Contenu connexe

Tendances

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosAlvaro Enrique Ruano
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
Programacion Orientada a Eventos
Programacion Orientada a EventosProgramacion Orientada a Eventos
Programacion Orientada a EventosLaura
 
Ventajas y desventajas de las bdoo
Ventajas y desventajas de las bdooVentajas y desventajas de las bdoo
Ventajas y desventajas de las bdooNerhys Palacios
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en JavaUCE
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++Rosbelia Balza
 
Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++compumet sac
 
Mapa conceptual java
Mapa conceptual java Mapa conceptual java
Mapa conceptual java hack-13
 
Lenguaje de simulación
Lenguaje de simulaciónLenguaje de simulación
Lenguaje de simulaciónJeicod Tupapa
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Ejercicio de máquina de turing
Ejercicio de máquina de turingEjercicio de máquina de turing
Ejercicio de máquina de turingJonathan Bastidas
 

Tendances (20)

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Abstracción de datos
Abstracción de datosAbstracción de datos
Abstracción de datos
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Ventajas vs Desventajas se SGBD
Ventajas vs Desventajas se SGBDVentajas vs Desventajas se SGBD
Ventajas vs Desventajas se SGBD
 
Programacion Orientada a Eventos
Programacion Orientada a EventosProgramacion Orientada a Eventos
Programacion Orientada a Eventos
 
Greenfoot 5
Greenfoot 5Greenfoot 5
Greenfoot 5
 
Ventajas y desventajas de las bdoo
Ventajas y desventajas de las bdooVentajas y desventajas de las bdoo
Ventajas y desventajas de las bdoo
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++
 
Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Conceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de DatosConceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de Datos
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Mapa conceptual java
Mapa conceptual java Mapa conceptual java
Mapa conceptual java
 
Lenguaje de simulación
Lenguaje de simulaciónLenguaje de simulación
Lenguaje de simulación
 
Librerias de C++
Librerias de C++Librerias de C++
Librerias de C++
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Ejercicio de máquina de turing
Ejercicio de máquina de turingEjercicio de máquina de turing
Ejercicio de máquina de turing
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 

Similaire à Persistencia en Java - Serialización (20)

Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
 
Java world
Java worldJava world
Java world
 
Suarez l 2001 el paquete java io
Suarez l 2001 el paquete java ioSuarez l 2001 el paquete java io
Suarez l 2001 el paquete java io
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Grupo1
Grupo1Grupo1
Grupo1
 
Curso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-TouchCurso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-Touch
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Java 1.4 to java 6
Java 1.4 to java 6Java 1.4 to java 6
Java 1.4 to java 6
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Serializacion
SerializacionSerializacion
Serializacion
 
C# oop
C#   oopC#   oop
C# oop
 
C# oop
C#   oopC#   oop
C# oop
 
MANUAL DE C#
MANUAL DE C#MANUAL DE C#
MANUAL DE C#
 
MANUAL 2
MANUAL 2MANUAL 2
MANUAL 2
 
C# oop
C#   oopC#   oop
C# oop
 
C# oop
C#   oopC#   oop
C# oop
 
manual de c# (1)
manual de c# (1)manual de c# (1)
manual de c# (1)
 
Java
JavaJava
Java
 
Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 

Plus de Carlos Hernando

Introduciendo Serverless en Proyectos Python
Introduciendo Serverless en Proyectos PythonIntroduciendo Serverless en Proyectos Python
Introduciendo Serverless en Proyectos PythonCarlos Hernando
 
Microservicos: Cuándo y Cómo
Microservicos: Cuándo y CómoMicroservicos: Cuándo y Cómo
Microservicos: Cuándo y CómoCarlos Hernando
 
Bases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a HibernateBases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a HibernateCarlos Hernando
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCCarlos Hernando
 
Introducción rápida a SQL
Introducción rápida a SQLIntroducción rápida a SQL
Introducción rápida a SQLCarlos Hernando
 

Plus de Carlos Hernando (8)

Introduciendo Serverless en Proyectos Python
Introduciendo Serverless en Proyectos PythonIntroduciendo Serverless en Proyectos Python
Introduciendo Serverless en Proyectos Python
 
Microservicos: Cuándo y Cómo
Microservicos: Cuándo y CómoMicroservicos: Cuándo y Cómo
Microservicos: Cuándo y Cómo
 
Try AngularJS
Try AngularJSTry AngularJS
Try AngularJS
 
Django tricks (2)
Django tricks (2)Django tricks (2)
Django tricks (2)
 
Metodologías Ágiles
Metodologías ÁgilesMetodologías Ágiles
Metodologías Ágiles
 
Bases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a HibernateBases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a Hibernate
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Introducción rápida a SQL
Introducción rápida a SQLIntroducción rápida a SQL
Introducción rápida a SQL
 

Dernier

Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 

Dernier (20)

Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 

Persistencia en Java - Serialización

  • 1. Persistencia en JAVA Serialización Carlos Hernando Carasol chernando@acm.org 5 de Mayo de 2011
  • 2. Índice de contenidos Concepto de serialización Serialización en Java Objetos compuestos y complejos Elementos no serializables Extendiendo serialización Limitaciones
  • 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
  • 6. Usos de la serialización Guardar a f chero i Transmitir por red RMI En JEE, guardar en la sesión HTTP
  • 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. Ejemplo no serializable public 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. Ejemplo serializable public 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. Objeto → Exterior ObjectOutputStream oos.writeObject(jugador) Solamente es necesario que jugador implemente Serializable
  • 11. Exterior → Objeto ObjectInputStream Jugador jugador = (Jugador) ois.readObject() Es necesario que jugador implemente Serializable Es necesario realizar una conversión
  • 12. Ejemplo try { FileOutputStream fos = new FileOutputStream("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. 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. Serializar un objeto compuesto Añado la clase Inventario a Jugador: public class Jugador implements Serializable{ String nombre; Inventario inventario; … }
  • 15. Todos han de ser serializable java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Inventario
  • 16. Solución 1 Nos interesa serializar la estructura relacionada public class Inventario implements Serializable {
  • 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. 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. 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. Serializar estructuras complejas En Java los Collections son serializables
  • 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. 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. Ampliar métodos de serialización private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; private void readObjectNoData() throws ObjectStreamException;
  • 24. Ejemplo private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); // Haciendo trampas System.out.println("Inventario - dinero: " + this.inventario.dinero); this.inventario.dinero += 100; System.out.println("Inventario - dinero: " + this.inventario.dinero); }
  • 25. Ejercicio Calcular el peso del equipo con readObject
  • 26. Ejercicio Convertir en transient: Jugador.vida Inventario.equipo Guardarlos mediante writeObject
  • 27. Limitar la serialización Sobrescribir los métodos provocando excepciones private void writeObject(ObjectOutputStream out) throws IOException { throw new NotSerializableException("No!"); } private void readObject(ObjectInputStream in) throws IOException { throw new NotSerializableException("No!");
  • 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. serialVersionUID La solución consiste en identif car la clase i Utilizamos serialver o Eclipse public class Jugador implements Serializable { private static final long serialVersionUID = 77552270920966258L;
  • 30. Otros uso de la serialización RMI En BBDD Criptografía
  • 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. 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
  • 34. Objetivo del caso Fijar los conocimientos de cada técnica Comprobar las diferencias entre ellas
  • 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. 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
  • 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