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 de acordo com o local e arquivo passado no seu primeiro parâmetro. Este objeto é utilizado para a criação do objeto objstream da classe ObjectOutputStream. Em seguida utiliza-se o método writeObject() de objstream para transformar em bytes o conteúdo do objeto que será serializado. Por fim, o método close() fecha o arquivo e finaliza a gravação.

O método loadObject() cria um objeto da classe FileInputStream para ler o arquivo passado no seu primeiro parâmetro. Este objeto é utilizado para a criação do objeto objstream da classe ...

Quer ler esse conteúdo completo? Tenha acesso completo