Serializable

6 respostas
vinny767

Amigos,

Tive uma explicação hoje sobre sobre a serialização em Java. O cara que me explicou, disse que Serializar um objeto significa "tirar uma foto" do estado de um determinado objeto em determinado momento e salva-lo em um arquivo no HD.

Pois bem...

1 - Gostaria de saber se este conceito está correto.
2 - Gostaria de um exemplo prático.
3 - Gostaria de saber como isso é feito. Posso salvar o estado de qualquer objeto? Por exemplo, posso fazer isso com um javabean? A qualquer momento? Tenho que disparar algum metodo para salvar o estado ou é automatico? Se for automatico, qual criterio é usado pela JVM para capturar o objeto?

Por enquanto é so! Obrigado!

6 Respostas

T
  1. Está
  2. Exemplo:
class Cliente implements Serializable {
public long id;
public String nome, endereco;
public double saldo;
}
Cliente cli = new Cliente();
cli.id = 10; cli.nome = "José"; cli.endereco = "Av. Paulista"; cli.saldo = 10.0;
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ("objeto.bin"));
oos.writeObject (cli);
oos.close();
.....
ObjectInputStream ois = new ObjectInputStream (new FileInputStream ("objeto.bin"));
Cliente outroCli = (Cliente) ois.readObject();
ois.close();
  1. Um objeto só pode ser serializado se a classe implementa Serializable, e todos os membros que não são marcados como “transient” forem serializáveis.
    Você precisa gravá-lo explicitamente, como mostrado no exemplo acima.
vinny767

Se eu preciso grava-lo explicitamente, qual é a diferença de usar ou não usar o Serializable?
Eu posso faze-lo simplesmente “na mão”, não? (Criando o arquivo e gravando o objeto, sem implementar Serializable)

T

Você pode transformar o objeto em uma String, gravá-lo no arquivo, e depois lê-lo de volta. A diferença é que usando Serializable você não precisa escrever (e debugar) tanto código.

peczenyj

Interessante ler isso:

http://blog.caelum.com.br/2008/04/01/entendendo-o-serialversionuid/

vinny767

Então seria correto afirmar que somente posso implementar Serializable se minha classe trabalhar com Streams (input/output de arquivos)?

Porque já vi muita classe que nao lê nem grava nada implementando Serializable… Isso está correto?

T

Se o objeto precisar ser trafegado entre processos, ou guardado em sessões de um web server, ou outras coisas que precisam transferir e guardar o estado de um objeto de maneira simples, a serialização é útil.

Criado 8 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 6
Participantes 3