Automatic translation

Archives

juillet 2008
L Ma Me J V S D
« juin   août »
 123456
78910111213
14151617181920
21222324252627
28293031  

Contributeurs

Qui a dit que serialVersionUID était obligatoire ?

Sérialisation et serialVersionUID

Ceux d’entre nous qui se sont déjà heurtés aux problématiques de sérialisation d’objets java, savent qu’il est important de spécifier l’attribut statique serialVersionUID sur les classes sérialisables pour permettre à deux applications de continuer à pouvoir s’échanger des données même si elles ont des versions légèrement différentes des classes en question.

En effet, lorsqu’un objet est sérialisé, Java commence à envoyer dans le flux le nom de sa classe puis son serialVersionUID. Lorsque l’objet est désérialisé depuis ce flux, Java charge la classe puis vérifie que son serialVersionUID correspond à celui qui est dans le flux. Lorsqu’il n’est pas spécifié explicitement, le serialVersionUID est calculé à partir des caractéristiques de la classe. La plupart des modifications d’une classe modifie le serialVersionUID ainsi calculé. (J’ai longtemps cru que les modifications dans l’implémentation d’une méthode n’influençait pas ce calcul. J’avais tord, certaines modifications, comme utiliser la notation <classname>.class ont des effets de bord avec certains compilateurs qui peuvent changer ce calcul)

Ainsi, je pensais jusqu’à récemment que deux versions d’une classe donnée ne pouvaient être compatibles pour la sérialisation java que si leur serialVersionUID (spécifié ou calculé) était le même. (Ce qui est facilement vérifiable avec l’utilitaire serialver du jdk)

. . . → Lire la suite: Qui a dit que serialVersionUID était obligatoire ?