Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modification de données Serialisées ?

4 réponses
Avatar
pcouas
Bonjour

J'ai une classe Composant dont des instances sont serialis=E9e sur
Dique, et qui fonctionne.
Ensuite j'ai modifi=E9 le class Composant en rajoutant de nouveaux
champs et m=E9thode.

Le probleme est donc que les deux ne sont plus en phase, et que cela me
plante ?
Auriez vous une idees ?

Je ne peux utiliser la serialisation XML maintenant, car cela
m'obligerais =E0 reccreer tous les composants d=E9ja s=E9rialis=E9, et j'en
est pas mal ?


Merci de vos commentaires
Philippe

4 réponses

Avatar
Kupee
Bonjour

J'ai une classe Composant dont des instances sont serialisée sur
Dique, et qui fonctionne.
Ensuite j'ai modifié le class Composant en rajoutant de nouveaux
champs et méthode.

Le probleme est donc que les deux ne sont plus en phase, et que cela me
plante ?
Auriez vous une idees ?

Je ne peux utiliser la serialisation XML maintenant, car cela
m'obligerais à reccreer tous les composants déja sérialisé, et j'en
est pas mal ?


Salut, il aurait fallu utiliser un champ serialversionuid dans ta classe
(sinon il est généré automatiquement a la compilation), qui permet de
retrouver la classe même si celle ci a changé.
Je ne me souviens plus la politique de java pour les changements dans
les classes.
A priori les nouvelles méthodes ne posent pas de problème, les nouveaux
champs seront valorisés a leur valeur par défaut (null pour les objets 0
les numériques ...) lors de la désérialisation d'anciens objets.
Fais quelque recherches sur ce champ tu verras.
Par contre si tes anciennes classes n'en contiennent pas je sais pas
trop ce que tu peux faire. Peut etre essayer de retrouver l'ancien
serialversionuid généré par java et le recopier dans ta nouvelle version
de classe. Mais je sais pas si ca marchera bien.

Avatar
Mike Baroukh
Pour retrouver l'ancien serialVersionUid, il suffit de regarder le
message de l'exception produite lorsqu'on essaye de le lire. Il indique
le nouveau et l'ancien.

Donc, effectivement : il suffit de le récupérer et de le mettre dans la
nouvelle classe avec
static final long serialVersionUID = <valeur>L;

Le nouvelle méthode n'influent pas.
les nouveau champ resterons à leur valeur par défaut.

Mike


Bonjour

J'ai une classe Composant dont des instances sont serialisée sur
Dique, et qui fonctionne.
Ensuite j'ai modifié le class Composant en rajoutant de nouveaux
champs et méthode.

Le probleme est donc que les deux ne sont plus en phase, et que cela me
plante ?
Auriez vous une idees ?

Je ne peux utiliser la serialisation XML maintenant, car cela
m'obligerais à reccreer tous les composants déja sérialisé, et j'en
est pas mal ?


Salut, il aurait fallu utiliser un champ serialversionuid dans ta classe
(sinon il est généré automatiquement a la compilation), qui permet de
retrouver la classe même si celle ci a changé.
Je ne me souviens plus la politique de java pour les changements dans
les classes.
A priori les nouvelles méthodes ne posent pas de problème, les nouveaux
champs seront valorisés a leur valeur par défaut (null pour les objets 0
les numériques ...) lors de la désérialisation d'anciens objets.
Fais quelque recherches sur ce champ tu verras.
Par contre si tes anciennes classes n'en contiennent pas je sais pas
trop ce que tu peux faire. Peut etre essayer de retrouver l'ancien
serialversionuid généré par java et le recopier dans ta nouvelle version
de classe. Mais je sais pas si ca marchera bien.



Avatar
ownowl

Bonjour

J'ai une classe Composant dont des instances sont serialisée sur
Dique, et qui fonctionne.
Ensuite j'ai modifié le class Composant en rajoutant de nouveaux
champs et méthode.

Le probleme est donc que les deux ne sont plus en phase, et que cela me
plante ?
Auriez vous une idees ?

Je ne peux utiliser la serialisation XML maintenant, car cela
m'obligerais à reccreer tous les composants déja sérialisé, et j'en
est pas mal ?



Salut, il aurait fallu utiliser un champ serialversionuid dans ta classe
(sinon il est généré automatiquement a la compilation), qui permet de
retrouver la classe même si celle ci a changé.
Je ne me souviens plus la politique de java pour les changements dans
les classes.
A priori les nouvelles méthodes ne posent pas de problème, les nouveaux
champs seront valorisés a leur valeur par défaut (null pour les objets 0
les numériques ...) lors de la désérialisation d'anciens objets.
Fais quelque recherches sur ce champ tu verras.
Par contre si tes anciennes classes n'en contiennent pas je sais pas
trop ce que tu peux faire. Peut etre essayer de retrouver l'ancien
serialversionuid généré par java et le recopier dans ta nouvelle version
de classe. Mais je sais pas si ca marchera bien.


ca doit marcher, on peut retrouver ce numéro grace à l'utilitaire de sun
founit avec le jdk : serialver

Olivier


Avatar
pcouas
Merci cela fonctionne