SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
Serialización personalizada
El proceso de serialización proporcionado por el lenguaje Java es suficiente para la mayor parte de
las clases, ahora bien, se puede personalizar para aquellos casos específicos.
Para personalizar la serialización, es necesario definir dos funciones miembros writeObject y
readObject. El primero, controla que información es enviada al flujo de salida. La segunda, lee la
información escrita por writeObject .
La definición de writeObject ha de ser la siguiente
private void writeObject (ObjectOutputStream s) throws IOException{
s.defaultWriteObject();
//...código para escribir datos
}
La función readObject ha de leer todo lo que se ha escrito con writeObject en el mismo orden en el
que se ha escrito. Además, puede realizar otras tareas necesarias para actualizar el estado del
objeto.
private void readObject (ObjectInputStream s) throws IOException{
s.defaultReadObject();
//...código para leer datos
//...
//actualización del estado del objeto, si es necesario
}
Para un control explícito del proceso de serialización la clase ha de implementar el interface
Externalizable. La clase es responsable de escribir y de leer su contenido, y ha de estar coordinada
con sus calses base para hacer esto.
La definición del interface Externalizable es la siguiente
packege java.io;
public interface Externalizable extends Serializable{
public void writeExternal(ObjectOutput out) throws IOException;
public void readExternal(ObjectOutput in) throws IOException,
java.lang.ClassNotFoundException;;
}
A continuación veremos un ejemplo que consistirá en:





Una clase Empleado con los atributos legajo, apellido y nombre, y sus respectivos getters.
Un método serializar, que recibirá como parámetro el nombre del archivo donde escribirá el archivo.
Un método hidratar, que recibirá como parámetro el nombre del archivo de donde recuperará el
objeto.
Una clase Test con el método main, que se encargará de crear el objeto empleado y serializarlo, y
luego de recuperarlo (hidratarlo)
/**
* Empleado.java
*
*/
package serializacion;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* @author Luciano
* @version 1.0
*
*/
@SuppressWarnings("serial")
public class Empleado implements Serializable {
/**
* Atributos de clase
*/
int legajo;
String apellido;
String nombre;
/**
* Constructor
*
* @param legajo Legajo del empleado
* @param apellido Apellido del empleado
* @param nombre Nombre del empleado
*/
public Empleado(int legajo, String apellido, String nombre) {
super();
this.legajo = legajo;
this.apellido = apellido;
this.nombre = nombre;
}
/**
* Constructor
*
*/
public Empleado() {
super();
}
/**
* Escribe a archivo el objeto Empleado
*
* @param archivo Nombre de archivo
* @throws IOException Excepción de entrada/salida
*/
public void serializar (String archivo) throws IOException {
ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(archivo));
salida.writeObject(this);
}
/**
*
* @param archivo Nombre de archivo
* @return Objeto hidratado
* @throws IOException Excepción de entrada/salida
* @throws ClassNotFoundException Escepción de clase no encontrada
*/
public Empleado hidratar (String archivo) throws IOException, ClassNotFoundException {
ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(archivo));
return (Empleado) entrada.readObject();
}
/**
* Getter de Apellido de Empleado
* @return Apellido del empleado
*/
public String getApellido() {
return apellido;
}
/**
* Getter de Legajo de Empleado
* @return Legajo del empleado
*/
public int getLegajo() {
return legajo;
}
/**
* Getter de Nombre de Empleado
* @return Nombre del empleado
*/
public String getNombre() {
return nombre;
}
}
/**
* Test.java
*
*/
package serializacion;
import java.io.IOException;
public class Test {
/**
* Main
*
* @param args
*/
public static void main(String[] args) {
/* Creación y serialización del objeto Empleado */
Empleado s = new Empleado(122,"Fernandez","Jorge");
try {
s.serializar("empleado_serializado");
} catch (IOException e1) {
System.err.print(e1.getMessage());
}
/* Creación de un objeto Empleado vacío e hidratación */
Empleado h = new Empleado();
try {
h = h.hidratar("empleado_serializado");
System.out.println("Legajo....: " + h.getLegajo());
System.out.println("Apellido..: " + h.getApellido());
System.out.println("Nombre....: " + h.getNombre());
} catch (IOException e1) {
System.err.print(e1.getMessage());
} catch (ClassNotFoundException e1) {
System.err.print(e1.getMessage());
}
}
}

Más contenido relacionado

La actualidad más candente

Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - SerializaciónCarlos Hernando
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructorrezzaca
 
Spring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres AltezSpring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres Alteza19987225
 
Constructores
ConstructoresConstructores
ConstructoresUCE
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVAinnovalabcun
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadasGaloGabriel
 
Serializacion de objetos en java
Serializacion de objetos en javaSerializacion de objetos en java
Serializacion de objetos en javaHugo Nugra
 
Serializacion de objetos en java
Serializacion de objetos en javaSerializacion de objetos en java
Serializacion de objetos en javaHugo Nugra
 
Anatomía de un proyecto - Diapositiva
Anatomía de un proyecto - DiapositivaAnatomía de un proyecto - Diapositiva
Anatomía de un proyecto - DiapositivaPedro Mesía
 

La actualidad más candente (16)

Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
Ejemplosencillocon rmi
Ejemplosencillocon rmiEjemplosencillocon rmi
Ejemplosencillocon rmi
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
 
Spring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres AltezSpring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres Altez
 
Java Rmi
Java RmiJava Rmi
Java Rmi
 
Constructores
ConstructoresConstructores
Constructores
 
Sintaxisenjava
Sintaxisenjava Sintaxisenjava
Sintaxisenjava
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Hibernate - JPA @luce
Hibernate - JPA @luceHibernate - JPA @luce
Hibernate - JPA @luce
 
J Flex Cup
J Flex CupJ Flex Cup
J Flex Cup
 
Serializacion de objetos en java
Serializacion de objetos en javaSerializacion de objetos en java
Serializacion de objetos en java
 
Serializacion de objetos en java
Serializacion de objetos en javaSerializacion de objetos en java
Serializacion de objetos en java
 
Anatomía de un proyecto - Diapositiva
Anatomía de un proyecto - DiapositivaAnatomía de un proyecto - Diapositiva
Anatomía de un proyecto - Diapositiva
 

Similar a Serialización personalizada

Similar a Serialización personalizada (20)

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
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
 
Serializacion de objetos
Serializacion de objetosSerializacion de objetos
Serializacion de objetos
 
P2C2 Introducción a JEE5
P2C2 Introducción a JEE5P2C2 Introducción a JEE5
P2C2 Introducción a JEE5
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
Lo nuevo de Java EE6
Lo nuevo de Java EE6Lo nuevo de Java EE6
Lo nuevo de Java EE6
 
Construccion a través de compontes
Construccion a través de compontesConstruccion a través de compontes
Construccion a través de compontes
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DB
 
Java
JavaJava
Java
 
Mockito
MockitoMockito
Mockito
 
presentacion de Aplicaciones de Java
presentacion de Aplicaciones de Javapresentacion de Aplicaciones de Java
presentacion de Aplicaciones de Java
 
La web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo Toolkit
 
spring framework
spring frameworkspring framework
spring framework
 
WPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralelaWPF 09. procesos asíncronos y programación paralela
WPF 09. procesos asíncronos y programación paralela
 
Foro tematico unidad 1
Foro tematico unidad 1Foro tematico unidad 1
Foro tematico unidad 1
 
Carro De Compras
Carro De ComprasCarro De Compras
Carro De Compras
 
08 i18 n
08 i18 n08 i18 n
08 i18 n
 
Sockets
SocketsSockets
Sockets
 

Más de Manuel Alejandro Hernandez Sanchez

Más de Manuel Alejandro Hernandez Sanchez (20)

Ejemplo
EjemploEjemplo
Ejemplo
 
Entrada
EntradaEntrada
Entrada
 
Ejemplo
EjemploEjemplo
Ejemplo
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Introducción
IntroducciónIntroducción
Introducción
 
Herencia
HerenciaHerencia
Herencia
 
Tipo estático y tipo dinámico
Tipo estático y tipo dinámicoTipo estático y tipo dinámico
Tipo estático y tipo dinámico
 
Introducción
IntroducciónIntroducción
Introducción
 
Uso de polimorfismo
Uso de polimorfismoUso de polimorfismo
Uso de polimorfismo
 
Enlace dinámico
Enlace dinámicoEnlace dinámico
Enlace dinámico
 
Clase base
Clase baseClase base
Clase base
 
Por qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadoresPor qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadores
 
Sobrecarga de constructores
Sobrecarga de constructoresSobrecarga de constructores
Sobrecarga de constructores
 
Recolección de basura
Recolección de basuraRecolección de basura
Recolección de basura
 
Retorno de valores
Retorno de valoresRetorno de valores
Retorno de valores
 
Metodos de mensajes
Metodos de mensajesMetodos de mensajes
Metodos de mensajes
 
La destrucción del objeto
La destrucción del objetoLa destrucción del objeto
La destrucción del objeto
 
Acceso al objeto
Acceso al objetoAcceso al objeto
Acceso al objeto
 
Agregar un metodo que toma parametros
Agregar un metodo que toma parametrosAgregar un metodo que toma parametros
Agregar un metodo que toma parametros
 
Asignación de variables de referencia de objeto
Asignación de variables de referencia de objetoAsignación de variables de referencia de objeto
Asignación de variables de referencia de objeto
 

Serialización personalizada

  • 1. Serialización personalizada El proceso de serialización proporcionado por el lenguaje Java es suficiente para la mayor parte de las clases, ahora bien, se puede personalizar para aquellos casos específicos. Para personalizar la serialización, es necesario definir dos funciones miembros writeObject y readObject. El primero, controla que información es enviada al flujo de salida. La segunda, lee la información escrita por writeObject . La definición de writeObject ha de ser la siguiente private void writeObject (ObjectOutputStream s) throws IOException{ s.defaultWriteObject(); //...código para escribir datos } La función readObject ha de leer todo lo que se ha escrito con writeObject en el mismo orden en el que se ha escrito. Además, puede realizar otras tareas necesarias para actualizar el estado del objeto. private void readObject (ObjectInputStream s) throws IOException{ s.defaultReadObject(); //...código para leer datos //... //actualización del estado del objeto, si es necesario } Para un control explícito del proceso de serialización la clase ha de implementar el interface Externalizable. La clase es responsable de escribir y de leer su contenido, y ha de estar coordinada con sus calses base para hacer esto. La definición del interface Externalizable es la siguiente packege java.io; public interface Externalizable extends Serializable{ public void writeExternal(ObjectOutput out) throws IOException; public void readExternal(ObjectOutput in) throws IOException, java.lang.ClassNotFoundException;; } A continuación veremos un ejemplo que consistirá en:     Una clase Empleado con los atributos legajo, apellido y nombre, y sus respectivos getters. Un método serializar, que recibirá como parámetro el nombre del archivo donde escribirá el archivo. Un método hidratar, que recibirá como parámetro el nombre del archivo de donde recuperará el objeto. Una clase Test con el método main, que se encargará de crear el objeto empleado y serializarlo, y luego de recuperarlo (hidratarlo)
  • 2. /** * Empleado.java * */ package serializacion; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * @author Luciano * @version 1.0 * */ @SuppressWarnings("serial") public class Empleado implements Serializable { /** * Atributos de clase */ int legajo; String apellido; String nombre; /** * Constructor * * @param legajo Legajo del empleado * @param apellido Apellido del empleado * @param nombre Nombre del empleado */ public Empleado(int legajo, String apellido, String nombre) { super(); this.legajo = legajo; this.apellido = apellido; this.nombre = nombre; } /** * Constructor * */ public Empleado() { super(); }
  • 3. /** * Escribe a archivo el objeto Empleado * * @param archivo Nombre de archivo * @throws IOException Excepción de entrada/salida */ public void serializar (String archivo) throws IOException { ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(archivo)); salida.writeObject(this); } /** * * @param archivo Nombre de archivo * @return Objeto hidratado * @throws IOException Excepción de entrada/salida * @throws ClassNotFoundException Escepción de clase no encontrada */ public Empleado hidratar (String archivo) throws IOException, ClassNotFoundException { ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(archivo)); return (Empleado) entrada.readObject(); } /** * Getter de Apellido de Empleado * @return Apellido del empleado */ public String getApellido() { return apellido; } /** * Getter de Legajo de Empleado * @return Legajo del empleado */ public int getLegajo() { return legajo; } /** * Getter de Nombre de Empleado * @return Nombre del empleado */ public String getNombre() { return nombre; } }
  • 4. /** * Test.java * */ package serializacion; import java.io.IOException; public class Test { /** * Main * * @param args */ public static void main(String[] args) { /* Creación y serialización del objeto Empleado */ Empleado s = new Empleado(122,"Fernandez","Jorge"); try { s.serializar("empleado_serializado"); } catch (IOException e1) { System.err.print(e1.getMessage()); } /* Creación de un objeto Empleado vacío e hidratación */ Empleado h = new Empleado(); try { h = h.hidratar("empleado_serializado"); System.out.println("Legajo....: " + h.getLegajo()); System.out.println("Apellido..: " + h.getApellido()); System.out.println("Nombre....: " + h.getNombre()); } catch (IOException e1) { System.err.print(e1.getMessage()); } catch (ClassNotFoundException e1) { System.err.print(e1.getMessage()); } } }