Sunday, March 29, 2009

Serializacion & Deserializaciòn de Objetos

En esta oportunidad muestro el manejo de 'Serializacion & Deserializacion de Objetos en Java'. Esto lo elabore en base de Objetos Stream, como sus dos mètodos famosos: 'writeObject' y 'readObject'. Los dos ejemplos que se muestran, realizan lo mismo impreso en consola, la diferencia que es que en el primer ejemplo el seteo de objetos esta en modo 'HardCode' y en el segundo utilizo un bean 'BeanSerializable' para la transmisiòn. En total los dos ejemplos cuantan con tres clases:

BeanSerializable.java

import java.io.Serializable;
import java.util.Date;

/**
* En clase es utilizada para el setedo de datos para su posterior serializacion.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class BeanSerializable implements Serializable{

private static final long serialVersionUID = -7905579217165381885L;

private Integer codigo;
private String nombre;
private String apellido;
private Date fecha;


public static long getSerialVersionUID() {
return serialVersionUID;
}

public Integer getCodigo() {
return codigo;
}

public void setCodigo(Integer codigo) {
this.codigo = codigo;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public Date getFecha() {
return fecha;
}

public void setFecha(Date fecha) {
this.fecha = fecha;
}
}

Serializando_Deserealizando_Objetos_01.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;

/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos en modo 'HardCode'.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/

public class Serializando_Deserealizando_Objetos_01 implements Serializable{

private static final long serialVersionUID = -2071812553599487256L;


public static void main( String[] args ){

try{
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);

objSalida.writeObject( 123456 );
objSalida.writeObject( "Cesar Ricardo" );
objSalida.writeObject( "Guerra Arnaiz" );
objSalida.writeObject( new Date() );

objSalida.flush();
objSalida.close();


/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );

Integer codigo = (Integer)objEntrada.readObject();
String nombre = (String)objEntrada.readObject();
String apellido = (String)objEntrada.readObject();
Date fecha = (Date)objEntrada.readObject();

objEntrada.close();

System.out.println( "Objeto Deserealizado #01: " + codigo );
System.out.println( "Objeto Deserealizado #02: " + nombre );
System.out.println( "Objeto Deserealizado #02: " + apellido );
System.out.println( "Objeto Deserealizado #03: " + fecha );
}
catch( Exception e ){
e.printStackTrace();
}
}

public static long getSerialVersionUID() {
return serialVersionUID;
}
}

Serializando_Deserealizando_Objetos_02.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;

/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos utilizando un Objeto Bean de apoyo.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/

public class Serializando_Deserealizando_Objetos_02 implements Serializable{

private static final long serialVersionUID = -7282739136711013954L;


public static void main( String[] args ){

try{
BeanSerializable objeto = new BeanSerializable();

/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);

objeto.setCodigo( 123456 );
objeto.setNombre( "Cesar Ricardo" );
objeto.setApellido( "Guerra Arnaiz" );
objeto.setFecha( new Date() );

objSalida.writeObject( objeto );

objSalida.flush();
objSalida.close();


/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );

BeanSerializable objetoBean = (BeanSerializable)objEntrada.readObject();

System.out.println( "Objeto: " + objetoBean );

if( objetoBean instanceof BeanSerializable ){
System.out.println( "Si es Instanciado al Objeto" );
}
else{
System.out.println( "No es Instanciado al Objeto" );
}

objEntrada.close();

System.out.println( "Objeto Deserealizado #1: " + objetoBean.getCodigo() );
System.out.println( "Objeto Deserealizado #2: " + objetoBean.getNombre() );
System.out.println( "Objeto Deserealizado #3: " + objetoBean.getApellido() );
System.out.println( "Objeto Deserealizado #4: " + objetoBean.getFecha() );
}
catch( Exception e ){
e.printStackTrace();
}
}

public static long getSerialVersionUID() {
return serialVersionUID;
}
}

6 comments:

Une Roseé Linea Perfumes said...

Hola amigo como estas estuve revisando tus codigos, me parecen muy buenos, queria saber si me puedes ayudar con un ejemplo que tengo que no he podido adaptar, tengo un archivo serializado pero no lo he poddo abrir con ningun codigo, en este caso se podria adapatar este codigo con ese archivo estableciendo los parametos correctos?

muchas gracias

JAVAMAN said...

Hola doc como estas, me parece que en si lo que me estas comentando es sobre un archivo no SERIALIZADO sino ENCRIPTADO eso es otra cosa ah !, SERIALIZADO es a nivel de Objetos que los serializas en 0 y 1 para un mejor envio de la data, pero encriptacion es por proteccion de data y creo que ese es tu caso mi estimado. Si es asi chek en el BLOG ya que tengo un post de diferentes modos de ENCRIPTACION y DESENCRIPTACION en JAVA ya posteados.

Saludos.

Unknown said...
This comment has been removed by the author.
Unknown said...
This comment has been removed by the author.
Unknown said...

Hola, está muy bueno el artículo, pero no logro poder asociarlo a como resolver un ejercicio especifico que me han asignado. Tengo este código:

String xml = //Aqui va el cuerpo del xml q no me sale bien en el comentario
pero la esencia es q me dan una etiqueta entry id=numero del id, y dentro otra etiqueta message que es la que contiene el texto que debo encontrar para retornar los id, algo asi mas o menos tuve q arreglarlo para q me saliera en el comentario:
entry id=1
message Application started /message
/entry
entry id=2
message Application ended /message
/entry
Collection ids = getIdsByMessage(xml, "Application ended");

yo tengo que implementar el metodo "getIdsByMessage", para q dado el string, que es el cuerpo del xml, yo retornar todos los id de los mensajes "Application ended"...con este ejemplo solo mostraria el "2".
Por fa ayudame explicandome cómo podria hacerle. Gracias

JAVAMAN said...

Hola Adriana como estás, sorry por la demora pero recién veo la consulta, para apoyarte agregame a mi Skype:

cesar.ricardo.guerra.arnaiz


Saludos.