Professional Documents
Culture Documents
Serializacin
ndice de contenidos
Concepto de serializacin Serializacin en Java Objetos compuestos y complejos Elementos no serializables Extendiendo serializacin Limitaciones
Serializacin: 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 serializacin
Guardar a f i chero Transmitir por red RMI En JEE, guardar en la sesin HTTP
Serializacin en Java
Se utiliza el interfaz Serializable No requiere implementacin de ningn tipo Puede utilizarse en todas las clases
Recordatorio: implements tambin se hereda
Ejemplo no serializable
public class Jugador { String nombre; public Jugador(String nombre) { this.nombre = nombre; } public static void main(String[] args) { Jugador jugador = ne } } Jugador(!"arlos!); S#stem.out.println(jugador.nombre);
Ejemplo serializable
public class Jugador implements Seriali$able { String nombre; public Jugador(String nombre) { this.nombre = nombre; } public static void main(String[] args) { Jugador jugador = ne } } Jugador(!"arlos!); S#stem.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 conversin
Ejemplo
tr# { %ile&utputStream 'os = ne %ile&utputStream(!'ichero.bin!); &bject&utputStream oos = ne oos. rite&bject(jugador); } catch (%ile(ot%ound)*ception e) { ++ ,&-& .uto/generated catch bloc0 } catch (1&)*ception e) { ++ ,&-& .uto/generated catch bloc0 } &bject&utputStream('os);
Ejercicio
Crear una clase Jugador:
nombre, cadena vida, entero de 0 a 100 ltimaEntrada, fecha con la ltima vez que guardo
Solucin "
Nos interesa serializar la estructura relacionada
public class 1nventario implements Seriali$able {
Solucin #
No nos interesa serializar la estructura relacionada:
transient 1nventario inventario;
Ejercicio
Aadir la clase Inventario:
dinero, l f oat capacidad, entero con valor por defecto 100 peso, entero de tipo transient
Clone
Shallow
Ejercicio
Aadimos la clase Equipo:
nombre, string cantidad, entero positivo peso (por unidad), entero positivo
Ejemplo
private void read&bject(&bject1nputStream in) thro s 1&)*ception5 "lass(ot%ound)*ception { in.de'ault6ead&bject(); ++ 7aciendo trampas S#stem.out.println(!1nventario / dinero4 ! 8 this.inventario.dinero); this.inventario.dinero 8= 9::; S#stem.out.println(!1nventario / dinero4 ! 8 this.inventario.dinero); }
Ejercicio
Calcular el peso del equipo con readObject
Ejercicio
Convertir en transient:
Jugador.vida Inventario.equipo
*imitar la serializacin
Sobrescribir los mtodos provocando excepciones
private void rite&bject(&bject&utputStream out) thro s 1&)*ception { thro } private void read&bject(&bject1nputStream in) thro s 1&)*ception { thro ne (otSeriali$able)*ception(!(o;!); ne (otSeriali$able)*ception(!(o;!);
Problemas de la serializacin
Cambios en la clase
Por ejemplo aadir/eliminar un campo
serialVersionU+%
La solucin consiste en identif i car la clase Utilizamos serialver o Eclipse
public class Jugador implements Seriali$able { private static 'inal long serial<ersion=1- = >>??@@>:A@:ABB@?CD;
Ejemplo de ,ripto
FileOutputStream fos = new FileOutputStream("out.des"); BufferedOutputStream bos = new BufferedOutputStream(fos); CipherOutputStream cos = new CipherOutputStream(bos, desCipher); ObjectOutputStream oos = new ObjectOutputStream(cos);
$-s in.ormacin
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
,aso pr-ctico
Especi.icaciones /enerales
Debe posibilitar la visualizacin y edicin de datos. Debido a su evolucin es recomendable utilizar un buen diseo
0estor de areas
Tarea
Descripcin Fecha de registro Persona asignada
Notas
Una persona puede tener mltiples tareas Un proyecto tiene mltiples tareas.
Persona
Nombre
Proyecto
Nombre
%ise1o orientativo
2esumen de Serializacin
Ventajas:
Sencillo Sin dependencias Inmediato Flexible
Desventajas:
Rudimentario Sufre con los cambios Sufre con las corrupciones No vale para grandes cantidades de datos