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.
Serialização e deserialização em Java - Parte 1
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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo