quinta-feira, 25 de março de 2010

[Java] Serializar e desserializar objetos


Serialização de objetos

Quando necessitamos ler ou gravar um objeto inteiro a partir de um arquivo, em Java, podemos utilizar do mecanismo de serialização de objetos. Um objeto serializado é representado como uma sequência de bytes que inclui os dados do objeto bem como as informações sobre o tipo do objeto e os tipos dos dados armazenados no objeto. Depois que um objeto serializado foi gravado em um arquivo, por exemplo, ele pode ser lido a partir do arquivo e ser desserializado(os dados representados em bytes podem agora ser utilizadas para recriar o objeto na memória).

Para que os objetos de uma classe possam ser serializados é necessário que a classe implemente a classe Serializable.

Serializable é uma interface de tags em Java utilizada apenas para identificar classes cujos objetos podem ser serializados (gravados) ou desserializados (lidos) de algum tipo de armazenamento (como por exemplo arquivo em disco ou campo de banco de dados) ou transmitidos por rede. Essa interface possui nenhum método. Mas porque então deve-se usar a interface Serializable para serializar objetos se esta classe possui NENHUM método? A resposta é simples. Apenas para "marcar" que seus objetos podem ser serializados.

Em uma classe que implementa Serializable o programador deve ter certeza que cada variável de instância da classe é do tipo Serializable. Qualquer variável de instância que não necessitar de ser Serializable deve ser declarada como transient para indicar que não é Serializable e deve ser ignorada durante o processo de serialização.

Por padrão todas as variáveis de tipos primitivos podem ser serializados, porém alguns cuidados devem ser tomados com variáveis de tipos por referência, para essas, deve ser verificado a definição da classe e possivelmente das superclasses (classes pais) para assegurar que o objeto é serializável. Objetos de array são serializáveis por padrão, entretanto, se o array contiver referências a outros objetos, esses objetos podem ou não serem serializáveis.

Nenhum comentário:

Postar um comentário