sábado, 17 de abril de 2010

Gravar estado de objetos em arquivo binário.

Olá pessoal! Hoje vou mostrar como gravar objetos em arquivo binário usando Java. Com isso é possível salvar o estado do objeto preservando o valor de seus atributos independente do tipo de dado.
A algum tempo atrás, quando comecei a desenvolver aplicações para Desktop tive a necessidade de armazenar configurações do servidor de banco de dados, foi então que eu descobri que era possível guardar o estado de um objeto em arquivo binário. Isso foi muito útil.

So, Let's Go Kids!


Para isso, vamos usar a API de java.io, uma classe de configuração simples, e o método que irá gravar nosso objeto.
Abaixo segue a nossa classe de configuração.


Na classe acima, temos um modelo simplificado de uma configuração. Coloquei apenas atributos com tipo simples de dados, mas poderia ter usado qualquer tipo de dado, ou classe.

Agora a classe com o método que irá gerar nosso arquivo.


Acima, na linha 21, instancio o File onde será salvo o arquivo de configuração. O nome do arquivo e a extensão são irrelevantes pois independente disso, o conteúdo do arquivo é binário e não pode editado, caso isso seja feito o arquivo será corrompido e não será possível a recuperação. No entanto, é possível ler o valor dos atributos do tipo String, então, se for colocar a senha do banco no arquivo, use um array de char, pois assim, não será legível.

Nas linhas 23 e 24, criamos respectivamente um FileOutputStream e um ObjectOutputStream, que nos possibilitam gravar o objeto em arquivo. Na linha 26, gravamos efetivamente o estado do objeto no arquivo. Importante ressaltar que podemos gravar N objetos no mesmo arquivo. Após isso, descarregamos, e fechamos os Stream`s.
Mais abaixo na linha 36 instanciamos nosso objeto de configuração, e na linha 38 o método que grava o arquivo.

Lendo o arquivo e recuperando o objeto


Então pessoal, assim como precisamos salvar o estado do objeto, também precisamos lê-lo. Observem a figura abaixo.



Na linha 48 temos o método que fará a leitura do arquivo e resgatará nosso objeto. Nas linhas 51 e 52 temos respectivamente o FileInputStream e ObjectInputStream, e na linha 54 a leitura do arquivo e recuperação do objeto.
Voltando ao método main, fiz algumas modificações apenas ler o arquivo e imprimir a informação no console. Na linha 36, instancio o File informando o arquivo onde salvei o objeto, depois na linha 38 é só chamar o método que irá recuperar o objeto.

The Real Life!


Como eu já disse antes, você pode gerar um arquivo com um único objeto para salvar a configuração do banco de dados da aplicação. Além disso, outro uso interessante, é que você pode usar para armazenar tabelas que serão pré-carregadas na aplicação no ato da instalação do software, assim, não é necessário criar script`s de carga, e mandá-los com a instalação, o que deixaria exposto sua estrutura.

Grande abraço.

Referências:

http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html
http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileInputStream.html
http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html