[ad#texto]
Muitos desenvolvedores tem dúvidas sobre o que é e para que serve a serialização em Java, basicamente serialização tem o objetivo de converter de forma intuitiva e simples a instancia de uma classe em um bytes ordenados e a fazer o processo inverso.
Falando em implementação veremos um exemplo, onde em primeiro momento iremos criar uma classe de exemplo para em seguida realizar a sua serialização e por último fazer o processo inverso.
Veja a classe de exemplo:
import java.io.Serializable; public class Exemplo1 implements Serializable{ private int numero; private String nome; public Exemplo1(int numero, String nome) { this.numero = numero; this.nome = nome; } public String getNome() { return nome; } public int getNumero() { return numero; } public String toString() { return new String("Numero = "+this.numero+" | Nome = "+this.nome); } } |
Como podem ver é uma classe simples, onde existe um construtor que define os valores para os dois atributos e após os métodos GET, a única diferença que podemos notar é a implementação da Serializable. Note que no final foi realizado um override do método toString() para formatar a saída da classe com os valores dos atributos.
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Teste1 { public static void main(String args []){ Exemplo1 e1 = new Exemplo1(001,"White"); Exemplo1 e2 = new Exemplo1(002,"Magician"); System.out.println(e1.toString()); System.out.println(e2.toString()); ObjectOutputStream out; ObjectInputStream in; try{ out = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir")+File.separator+"Exemplo1.bin")); out.writeObject(e1); out.writeObject(e2); out.flush(); out.close(); }catch(Exception e){ e.printStackTrace(); } Exemplo1 e3; Exemplo1 e4; try { in = new ObjectInputStream(new FileInputStream(System.getProperty("user.dir")+File.separator+"Exemplo1.bin")); e3 = (Exemplo1) in.readObject(); e4 = (Exemplo1) in.readObject(); in.close(); System.out.println(e3.toString()); System.out.println(e4.toString()); }catch (Exception e){ e.printStackTrace(); } } } |
A classe acima é bem simples e a princípio utiliza a primeira classe (Exemplo1.java) e utiliza a serialização enviando os bytes para o arquivo Exemplo1.bin. Na segunda parte da classe acima é lido o arquivo Exemplo1.bin e realizado o processo inverso, “jogando” os dados do arquivo para o objeto.
Caso tudo transcorra bem a saída do console seria:
Numero = 1 | Nome = White
Numero = 2 | Nome = Magician
Numero = 1 | Nome = White
Numero = 2 | Nome = Magician
A fonte deste post foi o WMagician, lá você irá encontrar mais sobre serialização e outros assuntos em Java, por exemplo, é possível utilizar a serialização em ambientes client-server utilizando sockets.