Comment sérialiser un non sérialisable en Java?

Comment puis-je sérialiser un objet qui n'implémente pas Serializable? Je ne peux pas le marquer sérialisable car la classe provient d'une bibliothèque tierce.

28
demandé sur Roy Dictus 2011-05-28 23:19:33

5 réponses

Vous ne pouvez pas sérialiser une classe qui n'implémente pas Serializable, mais vous pouvez l'envelopper dans une classe qui le fait. Pour ce faire, vous devez implémenter readObject et writeObject sur votre classe wrapper afin que vous puissiez sérialiser ses objets de manière personnalisée.

  • Tout d'abord, créez votre champ non sérialisable transient.
  • dans writeObject, appelez d'abord defaultWriteObject sur le flux pour stocker tous les champs non transitoires, puis appelez d'autres méthodes pour sérialiser les propriétés individuelles de votre objet non sérialisable.
  • dans readObject, appelez d'abord defaultReadObject sur le flux pour lire tous les champs non transitoires, puis appelez d'autres méthodes (correspondant à celles que vous avez ajoutées à writeObject) pour désérialiser votre objet non sérialisable.

J'espère que cela a du sens. :-)

23
répondu Chris Jester-Young 2016-09-23 21:52:52

Enveloppez la classe non sérialisable dans une classe qui implémente Serializable. Dans la méthode writeObject de votre classe, faites tout ce qui est nécessaire pour sérialiser suffisamment d'informations sur l'objet non sérialisable afin que la méthode readObject de votre classe puisse la reconstruire.

Sinon, contactez le développeur de la classe non sérialisable et dites-lui de la réparer. :-)

5
répondu Steve Emmerson 2011-05-28 19:50:06

Si votre classe implémente déjà L'interface sérialisable (requise pour la sérialisation), tout ce que vous devez faire est de déclarer le champ que vous ne voulez pas sérialiser avec transient:

    public transient String description;
3
répondu rox 2012-12-03 16:36:42

Vous pouvez utiliser Kryo. Cela fonctionne sur des classes non sérialisées mais les classes doivent être enregistrées à l'avance.

1
répondu Daniel Jipa 2017-10-31 05:57:45

Si la classe n'est pas FINALE, Vous pouvez créer votre propre classe qui l'étend et implémente Serializable. Il y a beaucoup d'autres façons de sérialiser en plus du mécanisme intégré de Java.

0
répondu Michael McGowan 2011-05-28 19:22:10