You are on page 1of 25

Arquivos Serializao (Serializable)

Prof. Marcos Andr Pisching, M.Sc.

Universidade do Contestado

Universidade do Planalto Catarinense

Agenda
Introduo ObjectOutputStream ObjectInputStream Grficos de Objetos writeObject e readObject Como a herana afeta na serializao

Prof. Marcos Andr Pisching, M.Sc.

Introduo

Prof. Marcos Andr Pisching, M.Sc.

Introduo
A serializao significa:
Salve este objeto e todas as suas variveis de instncias

Dados transientes e dados persistentes:


Transientes: dados que no sero armazenados. Estes so variveis marcadas com o modificador transient. Persistentes: dados que so armazenados. Todas as variveis de instncia exceto aquelas marcadas com transient.

Prof. Marcos Andr Pisching, M.Sc.

ObjectOutputStream e ObjectInputStream

Prof. Marcos Andr Pisching, M.Sc.

ObjectOutputStream e ObjectInputStream
Objetos so serializados a partir de dois mtodos:
ObjectOutputStream.writeObject() serializa e escreve em um stream ObjectInputStream.readObject() ler o stream e desserializa o objeto

As classes ObjectOutputStream e ObjectInputStream do pacote java.io.* so usadas para encapsular classes de nvel mais baixo, tais como, FileOutputStream e FileInputStream.
Prof. Marcos Andr Pisching, M.Sc. 6

ObjectOutputStream e ObjectInputStream
Exemplo:

Continua
Prof. Marcos Andr Pisching, M.Sc. 7

ObjectOutputStream e ObjectInputStream
Exemplo:

Prof. Marcos Andr Pisching, M.Sc.

Grficos de Objetos

Prof. Marcos Andr Pisching, M.Sc.

Grficos de Objeto
O que significa realmente salvar um objeto?
Se as variveis de instncia forme todas tipos primitivos, bem simples. Mas e se as variveis de instncia forem referncias a objetos?
Salvar a referncia no faz sentido. O Java cuida de serializar os objetos e seus valores. Ou seja, quando um objeto serializado, o Java salva todo o grfico do objeto, desde que, as classes envolvidas sejam serializadas tambm.

Prof. Marcos Andr Pisching, M.Sc.

10

Grficos de Objeto - exemplo

Continua
Prof. Marcos Andr Pisching, M.Sc. 11

Grficos de Objeto - exemplo

Continua
Prof. Marcos Andr Pisching, M.Sc. 12

Grficos de Objeto - exemplo


Resultado da execuo: problema... Pois a classe Coleira no foi serializada. necessrio fazer isso para que a JVM faa o mapa dos objetos a serem serializados/des-serializados

Continua
Prof. Marcos Andr Pisching, M.Sc. 13

Grficos de Objeto - exemplo


Corrigindo o problema

Resultado da execuo:

Prof. Marcos Andr Pisching, M.Sc.

14

Grficos de Objeto implicaes (1/5)


O que aconteceria se no tivessemos acesso ao cdigo-fonte da classe Coleira?
Ou seja, se no tivessemos opo de tornar a classe Coleira serializvel?

Poderiamos criar uma subclasse de Coleira, marcala como Serializable, e usa-la.


Mas isso tambm pode ser um problema: A classe Coleira poderia ser final, impedindo a criao de subclasses A prpria classe Coleira poderia referir-se a outros objetos no-serializveis. Se criar uma subclasse no for uma opo por outros motivos relacionados ao projeto.

Prof. Marcos Andr Pisching, M.Sc.

15

Grficos de Objeto implicaes (2/5)


Soluo!!!!
Usar o modificador transient pode no ser a melhor soluo. Se marcar a coleira como transient a serializao ir ignora-la, assim, teriamos o seguinte resultado:

Prof. Marcos Andr Pisching, M.Sc.

16

Grficos de Objeto implicaes (3/5)


coleira transiente

Coleira no serializvel

Continua
Prof. Marcos Andr Pisching, M.Sc. 17

Grficos de Objeto implicaes (4/5)

Tentou acessar a coleira de um objeto que foi recuperado do arquivo, porm esta foi declarada como transiente, e o objeto Coleira de Cachorro no momento null.

Prof. Marcos Andr Pisching, M.Sc.

18

Grficos de Objeto implicaes (5/5)

O que fazer agora????


Usar writeObject e readObject

Prof. Marcos Andr Pisching, M.Sc.

19

writeObject e readObject

Prof. Marcos Andr Pisching, M.Sc.

20

writeObject e readObject
Mtodos privados que podem ser implementados na classe. Quando implementados so chamados automaticamente durante o processo de serializao/des-serializao. Estes mtodos permitem interferir no processo de serializao/des-serializao Eles no esto definidos na interface serializable.
Fazem parte de um contrato de callback especial do sistema de serializao.

Prof. Marcos Andr Pisching, M.Sc.

21

writeObject e readObject
private void writeObject(ObjectOutputStream os) { //cdigo para salvar variveis de objetos no //serializvel }

private void readObject(ObjectInputStream os) { //cdigo para ler o estado do objeto, criar um //novo objeto e atribu-los as referncias //no serializveis }

Prof. Marcos Andr Pisching, M.Sc.

22

writeObject e readObject exemplo

Continua
Prof. Marcos Andr Pisching, M.Sc. 23

writeObject e readObject exemplo

Agora est correto!!!

Prof. Marcos Andr Pisching, M.Sc.

24

Serializao
Marcos Andr Pisching mpisching@gmail.com

You might also like