Serialização em Java
[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.