Serialização e deserialização em Java - Revista Java Magazine 99 - Parte 2

Este artigo mostrou como serializar e deserializar objetos Java junto com as características e detalhes envolvidos nestas tarefas. As opções apresentadas são caracterizadas e analisadas de acordo com suas funcionalidades e desempenho.

Artigo no estilo: Curso

De que se trata o artigo:

Este artigo mostrou como serializar e deserializar objetos Java junto com as características e detalhes envolvidos nestas tarefas. As opções apresentadas são caracterizadas e analisadas de acordo com suas funcionalidades e desempenho.

Em que situação o tema é útil:

A utilidade deste artigo é voltada para o desenvolvedor que procura alguma maneira de persistir objetos Java. A comparação entre três alternativas existentes auxilia o desenvolvedor a tomar uma decisão sobre qual método de serialização/deserialização adotar nos projetos que necessitem de tal funcionalidade.

Resumo DevMan:

O conteúdo desta segunda parte demonstra como as três alternativas de serialização e deserialização são implementadas na linguagem Java. Os códigos fonte das classes para as abordagens que utilizam o formato binário, o formato XML e o banco de dados MySQL são descritos passo a passo. Também são coletadas métricas de desempenho para uma análise comparativa que inclui o tempo de processamento, as características e as vantagens e desvantagens de se empregar as opções de persistência apresentadas.

Muitos desenvolvedores apresentam dúvidas quando é necessário considerar um local de persistência para objetos utilizados em Java, uma vez que esta persistência é necessária para manter o estado da aplicação, exportar e importar ou enviar e receber objetos através da rede.

Neste contexto, a primeira parte deste artigo focou na descrição e no detalhamento do que é serialização/deserialização e nas situações onde é necessário persistir dados em Java. Esta segunda parte destaca como foram desenvolvidas as classes utilizadas para comparar quantitativamente o tempo de execução necessário para a serialização/deserialização de objetos instanciados a partir de um POJO (Plain Old Java Object) que contém os principais tipos de dados básicos do Java. Por fim, é realizada uma análise com base nos dados obtidos através da execução destas classes.

Serialização e Deserialização binária

A serialização binária é o método mais tradicional para a persistência de objetos na plataforma Java. Esta abordagem utiliza um formato binário que só pode ser lido e gravado quando se utiliza o par de classes ObjectInputStrem e ObjectOutputStream em conjunto com as classes FileInputStream e FileOutputStream para ler e gravar os bytes do objeto em arquivos, respectivamente. A gravação e leitura trabalham com os dados em arquivos do sistema de arquivos do sistema operacional de acordo com o valor do quinto parâmetro passado para o método main() da classe ObjectSerDes.

A gravação de dados é implementada dentro do método saveObject(), que recebe o objeto a ser gravado e o local de armazenamento. Já a leitura é codificada no método loadObject(), que recebe apenas o local de armazenamento do arquivo e retorna um objeto genérico da classe Object. A Listagem 1 apresenta o conteúdo dos métodos saveObject() e loadObject(), que devem ser colocados dentro da classe ObjectSerDes.

Listagem 1. Conteúdo dos métodos saveObject() e loadObject() que fazem a serialização e deserialização binária, respectivamente.

// Serializa um objeto no formato binário em um arquivo // armazenado no local do segundo parâmetro private static void saveObject(Serializable object, String filename) throws IOException { // Criando o arquivo e o objeto da classe ObjectOutputStream ObjectOutputStream objstream = new ObjectOutputStream(new FileOutputStream(filename)); // O método writeObject() automaticamente transforma o conteúdo do // objeto em bytes. Se a classe não implementar Serialize, um erro será gerado objstream.writeObject(object); // Fechando o arquivo e salvando os dados objstream.close(); } // Deserializa o objeto armazenado no caminho passado e retorna este // objeto sem nenhum tipo de casting private static Object loadObject(String filename) throws ClassNotFoundException, IOException { // Abre o arquivo para a leitura ObjectInputStream objstream = new ObjectInputStream(new FileInputStream(filename)); // Lê os bytes e cria o objeto na memória Object object = objstream.readObject(); // Fecha o arquivo objstream.close(); // Retorna o objeto sem casting return object; }

O método saveObject() inicialmente cria um objeto da classe FileOutputStream"

[...] continue lendo...

Artigos relacionados