Artigo no estilo: Curso

De que se trata o artigo:

Este artigo apresenta uma comparação entre três alternativas para a serialização e deserialização de objetos Java. As opções comparadas são a serialização binária, o uso de arquivos no formato XML e o armazenamento no banco de dados MySQL.


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

O tema é útil para desenvolvedores que procuram mais informações sobre qual abordagem de serialização utilizar incluindo detalhes como tempo de execução para serialização/deserialização, tamanho dos objetos, capacidade para interoperabilidade e presença de recursos adicionais.

Resumo DevMan:

A serialização e deserialização de objetos em Java é útil em diversos contextos como jogos, aplicações distribuídas, servidores de cache e no mapeamento objeto-relacional (ORM). Este artigo apresenta uma comparação técnica entre as opções de serialização e deserialização de objetos Java que utilizam o formato binário, o formato XML e o armazenamento de objetos dentro do banco de dados MySQL. A comparação leva em consideração tempos de execução, tamanho de objetos, interoperabilidade e recursos adicionais.

A linguagem de programação Java é fortemente baseada nos conceitos definidos no paradigma de orientação a objetos. Isso quer dizer que é comum manipular campos, métodos, variáveis e outros elementos por meio de instâncias das classes que são armazenadas em variáveis e que permitem o acesso às funcionalidades proporcionadas por uma classe.

A manipulação dos objetos em Java utiliza como cenário a memória para o armazenamento das variáveis enquanto a aplicação está sendo executada. Porém, existem diversas situações onde é necessário realizar a persistência dos objetos, ou seja, armazená-los em outro local que não seja a memória para depois resgatá-los e colocá-los de volta na memória, onde podem ser manipulados.

Esta operação de persistência de objetos em locais que não sejam a memória recebe o nome de serialização. Já a operação inversa, ou seja, a leitura dos objetos e posterior colocação em memória é chamada de deserialização. Atualmente existem diversas técnicas, padrões, bibliotecas, frameworks e soluções para auxiliar o desenvolvedor Java a serializar e deserializar seus objetos de maneira simples, rápida e com diversas funcionalidades agregadas.

Este artigo apresentará uma comparação técnica entre as abordagens que permitem a serialização de objetos Java em arquivos binários e no formato XML armazenados no sistema de arquivos do computador, e também abordará a serialização binária de objetos armazenada em um banco de dados relacional. A comparação indicará os tempos de serialização/deserialização, características das abordagens e detalhes técnicos que podem auxiliar o desenvolvedor quando for necessário tomar uma decisão em relação à maneira e ao local de persistência dos seus objetos. Com base no que foi apresentado neste artigo o leitor terá uma visão geral de como implementar a serialização e a deserialização de objetos simples, tanto em arquivos como em um banco de dados.

Nesta primeira parte veremos o que é a serialização e deserialização de objetos e os detalhes do ambiente de testes e do conjunto de dados utilizado para a comparação entre as abordagens escolhidas.

Serialização e Deserialização de dados

Antes de começar a compreender os detalhes técnicos envolvidos na serialização de objetos em Java, é importante saber quais são os principais cenários de utilização deste recurso e o que ele proporciona para o desenvolvedor quando ele estiver considerando os requisitos e funcionalidades da aplicação. Veremos aplicações que envolvem interoperabilidade, servidores de cache, mapeamento objeto-relacional, persistência de estado em jogos e aplicações colaborativas.

A utilização de objetos implica na criação de um elemento da linguagem de programação que terá comportamento, representado pelos métodos, e características, representadas pelos campos que geralmente são acessados por meio de métodos públicos getters e setters. As características armazenam dados de acordo com os tipos de dados existentes no Java e também de acordo com os tipos de dados criados pelo usuário. Em muitas situações é preciso realizar a troca destes dados entre aplicações heterogêneas (não desenvolvidas em Java) ou homogêneas (desenvolvidas na plataforma Java). Esta interoperabilidade é uma das principais motivações para a persistência de objetos em Java através da serialização/deserialização. Por exemplo: um sistema financeiro externo pode exigir que, em um determinado momento, todos os dados armazenados nos objetos de uma aplicação em Java que está sendo executada sejam enviados para uma auditoria. Outro exemplo inclui a comunicação por meio de componentes como Web Services, que devido ao seu baixo acoplamento e uso de protocolos abertos como SOAP, exige algum tipo de serialização/deserialização de objetos para a troca de informações entre sistemas diferentes.

Recentemente o uso de servidores de cache, como o Memcached, por exemplo, tem ganhado cada vez mais espaço, principalmente em aplicações Web. O objetivo destes servidores é utilizar técnicas de cache para tornar mais rápido o acesso a objetos já criados. Neste cenário o recurso de serialização/deserialização assume um papel importante, pois o núcleo destes servidores depende diretamente de como a serialização/deserialização é empregada.

Outro exemplo comum de serialização envolve o uso de aplicações que fazem o mapeamento entre o modelo de classes de uma aplicação Java e o modelo de dados armazenado em um banco de dados. Geralmente a implementação e uso deste mapeamento é conhecido pela sigla ORM (Object-Relational Mapping), e sua implementação é facilitada por frameworks como Hibernate e Spring. Estes frameworks utilizam os conceitos de serialização/deserialização internamente, de forma a encapsular os detalhes envolvidos na persistência das informações.

...
Quer ler esse conteúdo completo? Tenha acesso completo