Como serializar um não serializável em Java?

Como posso serializar um object que não implementa Serializable? Não consigo marcá-lo Serializável porque a class é de uma biblioteca de terceiros.

Você não pode serializar uma class que não implementa Serializable , mas você pode envolvê-la em uma class que o faça. Para fazer isso, você deve implementar readObject e writeObject na sua class wrapper para poder serializar seus objects de forma personalizada.

  • Primeiro, torne seu campo transient não serializável.
  • Em writeObject , primeiro chame defaultWriteObject no stream para armazenar todos os campos não transitórios e, em seguida, chame outros methods para serializar as propriedades individuais de seu object não serializável.
  • Em readObject , primeiro chame defaultReadObject no stream para ler todos os campos não temporários e, em seguida, chame outros methods (correspondentes aos que você adicionou ao writeObject ) para desserializar seu object não serializável.

Espero que isto faça sentido. 🙂

Envolva a class não serializável em uma class própria que implemente Serializable . No método writeObject da sua class, faça o que for necessário para serializar informações suficientes sobre o object não serializável para que o método readObject da sua class possa reconstruí-lo.

Como alternativa, entre em contato com o desenvolvedor da class não serializável e diga a ele para corrigi-lo. 🙂

Se sua class já implementa a interface serializável (necessária para serialização), tudo o que você deve fazer é declarar o campo que não deseja serializar com transiente:

  public transient String description; 

Você pode usar o Kryo. Ele funciona em classs não serializadas, mas as classs precisam ser registradas antes.

Se a class não for final, você pode criar sua própria class que a amplia e implementa Serializable. Existem muitas outras maneiras de serializar além do mecanismo integrado do Java.