Bonjour Les classes qui mettent en œuvre l'interface sérialisable, qu'est-ce qu'elles mettent en œuvre exactement, car il n'y a pas de méthodes dans l'interface, et comment cela aide-t-il à maintenir l'état de l'objet à travers un réseau ?
Réponses
Trop de publicités?Il s'agit d'une interface de marquage. Une discussion supplémentaire peut être trouvée ici : http://stackoverflow.com/questions/1995198
En bref, l'interface est utilisée par le biais d'un code basé sur la réflexion qui inspecte les informations de type au moment de l'exécution, et si l'objet en question implémente cette interface, alors certaines actions sont entreprises (dans le cas de Serializable : l'objet est enregistré/chargé vers/depuis un flux).
Il ne maintient pas l'état lui-même. Mais elle marque la classe comme nécessitant une sérialisation, et le runtime sait alors qu'il doit sérialiser cette classe et ses composants (à l'exception des champs marqués comme transient
).
Il est utile de marquer explicitement les classes comme étant sérialisable et des champs comme transitoire (c'est-à-dire qu'il ne doit pas être sérialisé). Sinon, vous pourriez par inadvertance sérialiser tout votre programme pour le transmettre sur le réseau. Ce n'est probablement pas ce que vous voulez. Vous ne voudriez pas sérialiser des entités comme les usines. Ni les informations d'identification comme les mots de passe. Sans parler de la taille de la charge utile :-)
sérialisable est un marqueur L'interface sérialisable permet à Java de reconnaître que l'objet de la classe implémentée peut être sérialisé (c'est-à-dire écrire les informations de l'objet dans des fichiers ou tout autre canal). Ainsi, cela signifie que si vous voulez qu'un objet de classe puisse être sérialisé, vous devez faire en sorte que cette classe soit marquée par l'interface sérialisable. Dans le cas contraire, une exception IO sera levée et l'objet ne sera pas sérialisé.
Pourquoi cette exception est-elle levée ? Parce que le développeur doit décider si la sérialisation d'un objet et sa désérialisation ultérieure sont utiles ou non. Quand il n'y a pas d'utilité de la sérialisation, le développeur ne voudra pas que son objet soit sérialisé par lui ou par tout autre développeur utilisant sa classe. Prenons l'exemple de la classe Socket ; elle n'implémentera pas l'interface sérialisable parce que si vous pouvez sérialiser le socket et fermer l'application, puis relancer l'application et désérialiser le même objet socket. Pendant ce temps, le serveur connecté par le socket est hors service. Y a-t-il une utilité à sérialiser l'objet de la classe socket ?
De Wikipedia :
.... La sérialisation est le processus qui consiste à convertir une structure de données ou un objet en une séquence de bits afin qu'elle puisse être stockée dans un fichier, une mémoire tampon, ou transmis à travers un lien de connexion réseau .....
Vous pouvez faire des choses avec des objets sérialisés que vous ne pouvez pas faire avec des objets non sérialisés. Au lieu d'utiliser un webservice pour transmettre des données du client au serveur, vous pouvez mettre toutes les informations dans un bean sérialisé et éviter toute analyse xml et toute liaison.
Vous pouvez prendre un haricot sérialisé et l'écrire dans un fichier, l'enregistrer dans une base de données comme un blob.
L'interface sérialisée vous permet d'implémenter un niveau de persistance et de durabilité.