[Info]Sérialisation / Désérialisation...
Hello,
Un collègue m'a affirmé que lorsque l'on sérialise un objet Java ainsi :
Code:
1 2 3 4
| ObjectOutputStream oos = new ObjectOutputStream(file);
oos.writeObject(myObject);
oos.flush();
oos.close(); |
On n'était pas garanti de pouvoir le relire/désérialiser avec un JRE plus récent ... 8O
Est-ce exact ??? 8O 8O 8O
Merci !
Toine
Re: Sérialisation/Désérialisation...
Salut,
Citation:
Envoyé par onlytoine
On n'était pas garanti de pouvoir le relire/désérialiser avec un JRE plus récent ...
Oui... et Non...
A ma connaissance il y a deux "principaux" cas où la désérialisation echoue (pour une même classe) :
1) Ton objet a été modifié entre les deux versions des JRE. Dans ce cas c'est tout à fait normal que cela échoue. Si ton objet est une classe entièrement developpé par toi, il ne devrait pas y avoir de soucis. Mais le problème peut se rencontrer si tu sérialize ou hérite d'une classe du JRE : c'est le cas en particulier de tous les composants Swing. En effet ces composants peuvent avoir des changements importants entre deux versions de Java qui implique que la désérialization échoue.
Toutefois, ce problème ne se présente pas sur la plupart des classes Sérializables de l'API standard, et lorsque c'est le cas c'est indiqué dans la javadoc, par exemple pour les composants Swing :
Citation:
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing.
2) Ta classe a été compilé avec deux compilateurs différents. Dans ce cas il peut y avoir un problème car le serialVersionUID généré par les deux compilateurs est différents. Dans ce cas il faut définir le serialVersionUID dans le code de la classe.
Avec Java 5.0 tu peux même afficher un warning pour cela : FAQ : [Java 5.0] serial : "serializable class Main has no definition of serialVersionUID"
a++
PS : Sinon tu peux utiliser les classes XmlEncoder et XMLDecoder pour sauvegarder tes classes en XML...