quarta-feira, 13 de março de 2013

Serialização em Java

Pessoal, segue um exemplo de serilização em Java, como eu precisava passar meu objeto como string eu usei a classe HexBin da Apache, para isso adicionei a lib xmlbeans-2.3.0.jar ao meu projeto.

Segue exemplo abaixo:

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

public class MyObject implements Serializable {

    private static final long serialVersionUID = 1L;

    private Boolean myBoolean = true;
    private String myString = "s";
    private Date myDate = new Date();

    public String toString() {
        return "MyObject [ myBoolean=" + myBoolean + ", myString=" + myString + ", myDate=" + myDate + " ]";
    }

}

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.apache.xmlbeans.impl.util.HexBin;

public class Main {

    public static void main(String[] args) {
        // Voce tem um objeto
        MyObject objetoInicial = new MyObject();

        // serializa ele e o transforma em String
        byte[] bytesSerializados = Main.serialize(objetoInicial);
        String stringFromBytes = HexBin.bytesToString(bytesSerializados);

        // depois voce pode, a partir da String, transformar ele em bytes novamente 
        // e deserializar transformando-o no objeto inicial novamente
        byte[] bytesFromString = HexBin.stringToBytes(stringFromBytes);
        MyObject objetoDeserializado = (MyObject) Main.deserialize(bytesFromString);

        System.out.println(objetoInicial);
        System.out.println(objetoDeserializado);
    }

    /**
     * Funcao para serializar um objeto
     */
    public static byte[] serialize(Object obj) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream os = null;
        try {
            os = new ObjectOutputStream(out);
            os.writeObject(obj);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return out.toByteArray();
    }

    /**
     * Funcao para deserializar um objeto
     */
    public static Object deserialize(byte[] data) {
        ByteArrayInputStream in = new ByteArrayInputStream(data);
        try {
            ObjectInputStream is = new ObjectInputStream(in);
            return is.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

}

Abraço!!
Adriano Schmidt