La réponse à cette question est, peut-être surprenante, jamais ou de manière plus réaliste, uniquement lorsque vous y êtes contraint pour l'interopérabilité avec le code existant. . C'est la recommandation faite dans Effective Java, 3e édition par Joshua Bloch :
Il n'y a aucune raison d'utiliser la sérialisation Java dans tout nouveau système que vous écrivez.
L'architecte en chef d'Oracle, Mark Reinhold, a fait savoir comme disant que supprimer le mécanisme actuel de sérialisation de Java est un objectif à long terme.
Pourquoi la sérialisation Java est défectueuse
Java fournit, en tant que partie intégrante du langage, un schéma de sérialisation auquel vous pouvez adhérer, en utilisant la fonction Serializable
interface. Ce schéma présente toutefois plusieurs défauts insolubles et devrait être considéré comme une expérience ratée par les concepteurs du langage Java.
- Il prétend fondamentalement que l'on peut parler de le site forme sérialisée d'un objet. Mais il existe une infinité de schémas de sérialisation, qui donnent lieu à une infinité de formes sérialisées. En imposant un schéma, sans aucun moyen de le modifier, les applications ne peuvent pas utiliser le schéma qui leur convient le mieux.
- Il s'agit d'un moyen supplémentaire de construire des objets, qui contourne les contrôles de précondition effectués par vos constructeurs ou méthodes de fabrique. À moins que vous n'écriviez un code de désérialisation supplémentaire délicat, sujet aux erreurs et difficile à tester, votre code présente probablement une faiblesse de sécurité flagrante.
- Il est très difficile de tester l'interopérabilité de différentes versions du formulaire sérialisé.
- La manipulation d'objets immuables est problématique.
Ce qu'il faut faire à la place
Au lieu de cela, utilisez un schéma de sérialisation que vous pouvez contrôler explicitement. Par exemple, Protocol Buffers, JSON, XML ou votre propre schéma personnalisé.
4 votes
Pour information, la réponse acceptée ici est incomplète et trompeuse, car elle n'aborde pas les inconvénients de la sécurité. Voir Java efficace , Point 86 : Implémentez Serializable avec une grande prudence. La réponse de Raedwald ici disant de ne pas utiliser la sérialisation est la bonne.