serialização e E/S de arquivo
303você está aquieste é um novo capítulo
Salvando Objetos
14 serialização e E/S de arquivo
Os objetos podem ser achatados e reconstituídos. Os
objetos possuem estado e comportamento. O comportamento reside
na classe, mas o estado reside dentro de cada objeto individual.
Portanto, o que acontecerá quando for hora de salvar o estado
de um objeto? Se você estiver criando um jogo, precisará de um
recurso Salvar/Restaurar Jogo. Se estiver criando um aplicativo que
gere grá cos, precisará de um recurso Salvar/Abrir Arquivo. Se seu
programa tiver que salvar o estado, você poderá fazê-lo da maneira
mais difícil, examinando cada objeto e gravando meticulosamente
o valor de cada variável de instância, no formato que criar. Ou, da
maneira mais fácil, orientada a objetos — simplesmente congele/
achate/faça persistir/desidrate o próprio objeto e o reconstitua/
desachate/restaure/reidrate para que volte ao que era. Mas você
ainda terá que fazê-lo da maneira difícil em algumas situações,
principalmente quando o arquivo que seu aplicativo salvar tiver
que ser lido por algum outro aplicativo não escrito em Java, logo,
examinaremos as duas maneiras neste capítulo.
Se eu tiver que ler mais um arquivo cheio
de dados, acho que terei que matá-lo. Ele
sabe que posso salvar objetos inteiros,
mas deixa que o faça? NÃO, isso seria
muito fácil. Bem, veremos como ele se
sente depois que eu...
304 capítulo 14
salvando objetos
Capture a batida
Você criou o padrão perfeito. Deseja salvá-lo. Poderia pegar um pedaço de
papel e começar a rascunhá-lo, mas em vez disso pressionou o botão Salvar
(ou selecionou Salvar no menu Arquivo). Em seguida, forneceu um nome,
selecionou um diretório e respirou aliviado sabendo que sua obra-prima não
será eliminada pela mortal tela azul.
Você tem várias opções de como salvar o estado de seu programa Java e a
que escolher provavelmente vai depender de como planeja usar o estado
salvo. Aqui estão as opções que examinaremos neste capítulo.
Se seus dados forem usados somente pelo
programa Java que os gerou:
Use a serialização
Grave um arquivo que contenha objetos achatados
(serializados). Em seguida, faça seu programa ler os
objetos serializados no arquivo e converta-os novamente
em objetos ativos, residentes no acervo.
1
Se seus dados forem usados por outros programas:
Grave um arquivo de texto simples
Grave um arquivo, com delimitadores que outros programas
consigam analisar. Por exemplo, um arquivo delimitado por
tabulação que um aplicativo de banco de dados ou planilha
possa usar.
2
É claro que essas não são as únicas opções. Você pode salvar dados no
formato que quiser. Em vez de gravar caracteres, por exemplo, você pode
gravar seus dados como bytes. Ou gravar qualquer tipo primitivo Java como
um tipo primitivo Java — há métodos para a gravação de inteiros, longos,
booleanos, etc. Mas independentemente do método que você usar, as
técnicas básicas de E/S serão muito parecidas: gravar alguns dados em algo,
e geralmente esse algo é um arquivo em disco ou um uxo sendo recebido
de uma conexão de rede. Ler os dados é o mesmo processo invertido: ler
alguns dados em um arquivo do disco ou de uma conexão de rede. E é
lógico que tudo que abordaremos nessa parte estará relacionado às situações
em que você não estiver usando um banco de dados real.
Salvando o estado
Suponhamos que você tivesse um programa,
digamos, um jogo com uma aventura ctícia,
que precisasse de mais de uma sessão para
ser concluído. Conforme o jogo progride,
os personagens cam mais fortes, fracos,
inteligentes, etc. E coletam e usam (e perdem)
armas. Você não quer começar do zero sempre
que iniciar o jogo — seria necessária uma
eternidade para colocar seus personagens em
forma para uma batalha espetacular. Portanto,
precisa de uma maneira de salvar o estado
dos personagens e uma maneira de restaurá-lo
quando voltar ao jogo. E já que você também é
o programador do jogo, quer que o recurso de
salvar e restaurar seja tão simples (e à prova de
falhas) quanto possível.
Opção um
Grave os três objetos
serializados dos
personagens em um arquivo
Crie um arquivo e grave três
objetos serializados com os
personagens. O arquivo não terá
sentido se você tentar lê-lo
como texto:
ÌsrGameCharacter
%gê8MÛIpowerLjava/lang/
String;[weaponst[Ljava/lang/
String;xp2tlfur[Ljava.lang.
String;‘““VÁÈ{Gxptbowtsword
tdustsq~»tTrolluq~tbare handstbig
axsq~xtMagicianuq
~tspellstinvisibility
1
Opção dois
Grave um arquivo de texto
simples
Crie um arquivo e grave três
linhas de texto, uma por
personagem, separando as
informações do estado com
vírgulas:
50, Elfo, echa, espada, pó
200, Troll, mãos, grande machado
120, Mago, encantamentos,
invisibilidade
2

Get Use A Cabeça Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.