Você está na página 1de 12

Serializao e Persistncia

em Java

Prof. Jorge Viana Doria Junior, M.Sc.


Mestre em Informtica DCC/IM/iNCE/UFRJ
jjunior@unicarioca.edu.br
Conceitos
A Serializao o processo de serializar e desserializar objetos
de modo que eles possam ser armazenados ou transferidos e
depois recriados.

Em outras palavras, a Serializao o processo de converter um


objeto em uma sequncia linear de bytes que podem ser
armazenados ou transferidos;

A Desserializao o processo de converso de uma sequncia


previamente serializada de bytes em um objeto;
Conceitos
A serializao resume-se em salvar, gravar, capturar o estado
de um objeto. Ou seja, tenho um objeto de uma classe e quero
salvar seu estado: uso serializao pois, quando quiser us-lo
com seu ltimo estado gravado, somente desserializ-lo.

Exemplos: Itens no carrinho de compras em seu site de


comrcio eletrnico.
Serializao
ObjectInputStream e ObjectOutputStream so fluxos especiais;

Ao contrrio de tudo mais que vimos, eles no lem/escrevem


dados de tipos primitivos;

Serializao o processo de converter um objeto em um fluxo de


bits e vice-versa;

Serve para grav-lo em disco e envi-lo pela rede para outro


computador.
Serializao
Problemas:
Um objeto pode possuir referncias (ponteiros) para outros.
Devemos relativiz-las quando formos serializar este objeto;

Ao restaurar o objeto a sua forma em memria, devemos


recuperar as referncias aos objetos certos.
java.io.Serializable
Felizmente, Java j implementa este mecanismo;
Basta que a classe que deve ser convertida implemente a
interface Serializable;
Interface sem mtodos, sinalizadora.
Mecanismo de serializao:
Converte para bytes e vice-versa;
Faz e desfaz a relativizao das referncias;
Compensa diferenas entre sistemas operacionais;
Usa ObjectInputStream e ObjectOutputStream.
Exemplo de serializao
public class Info implements Serializable {
private String texto;
private float numero;
private Dado dado;
public Info(String t, float n, Dado d) {
texto = t;
numero = n;
dado = d;
}
public String toString() {
return texto + "," + numero + "," + dado;
}
}
Exemplo de serializao
import java.util.Date;
public class Dado implements Serializable {
private Integer numero;
private Date data;
public Dado(Integer n, Date d) {
numero = n;
data = d;
}
public String toString() {
return "(" + data + ":" + numero + ")";
}
}
Exemplo de serializao
import java.util.Date;
import java.io.*;
public class Teste {
public static void main(String[ ] args) throws Exception {
Info[ ] vetor = new Info[ ] {
new Info("Um", 1.1f, new Dado(10, new Date())),
new Info("Dois", 2.2f, new Dado(20, new Date()))
};

/* Continua... */
Exemplo de serializao
ObjectOutputStream out = new
ObjectOutputStream (new FileOutputStream("objs.dat"));
SERIALIZANDO out.writeObject("Os dados serializados foram:");
out.writeObject(vetor);
out.close();
ObjectInputStream in = new
ObjectInputStream(new FileInputStream("objs.dat"));
String msg = (String) in.readObject();
DESSERIALIZANDO
Info[ ] i = (Info[ ]) in.readObject();
in.close();
System.out.println(msg + "\n + i[0] + "\n + i[1]); }
}
Ler sobre Atributos Transientes

O Arquivo abaixo se encontra no AVA:

Aula 5.0-SERIALIZAO E PERSISTNCIA (CAELUM).pdf


Concluses
Java possui uma gama enorme de classes para as mais
variadas necessidades de I/O;

Para facilitar, use Scanner para leitura e PrintWriter para


escrita;

Para serializar objetos, confie no mecanismo do Java, bastando


implementar a interface sinalizadora Serializable.

Você também pode gostar