Qui implémente réellement des méthodes sérialisables?
J'ai appris comment utiliser Serializable
.
Je sais que si je créer une classe 'A' avec les différentes variables qui implémente Serializable
et j'ajoute Serializable
de ma classe, c'est aussi Serializable
.
Mais, qui est en fait la mise en œuvre de ces deux méthodes pour sérialiser?
Ne Object
de prendre soin de tout ou de classes différentes surcharges en cas de besoin?
source d'informationauteur Macarse
Vous devez vous connecter pour publier un commentaire.
La sérialisation est réellement mis en œuvre dans
java.io.ObjectOutputStream
(et java.io.ObjectInputStream) et certains de ses classes d'assistance. Dans de nombreux cas, cette prise en charge intégrée est suffisante, et le développeur a besoin tout simplement de mettre en œuvre l'interface marqueurSerializable
. Cette interface est appelée un "marqueur" parce qu'il ne veut pas déclarer toutes les méthodes, et n'a donc pas besoin d'une API spécifique sur la mise en œuvre des classes.Un programmeur peut ajouter ou de remplacer le mécanisme de sérialisation par défaut avec leurs propres méthodes si nécessaire. Par exemple, si certains d'initialisation supplémentaires est nécessaire après la désérialisation d'un objet, d'une méthode peut être ajouté avec la signature suivante:
Pour un contrôle total de la sérialisation et la désérialisation, de mettre en œuvre
java.io.Externalizable
au lieu deSerializable
.Il existe de nombreux autres points d'extension de la sérialisation en Java, si nécessaire. Le la sérialisation spécification est authentique et complète de la source d'apprentissage pour tous.
Je suppose que les méthodes que vous parlez, sont
readObject()
etwriteObject()
. Vous avez seulement besoin de mettre en œuvre ces si vous avez besoin de faire de la sérialisation personnalisée, par exemple lorsque vous avez des champs dans votre objet qui ne sont pas sérialisables. Si vous n'avez serializable champs et primitives, vous n'avez pas à implémenter des méthodes de sérialisation.Aussi, vous pouvez ignorer certains champs de la sérialisation par l'ajout de la
transient
mot-clé.Regarder la Doc API de
Serializable
il explique le mécanisme en détail.Fondamentalement, vous n'avez rien à faire, sauf si vous voulez plus de contrôle sur la façon dont vos objets sont sérialisés, auquel cas il y a quelques méthodes "magiques" que vous pouvez mettre en œuvre et qui sera appelée par le mécanisme de sérialisation.
Si vous voulez un contrôle total, vous pouvez utiliser Externalizable à la place.
Oui, ce moment de votre classe Sérialisable.
Pour une classe sérialisable, chaque objet contenu en tant que membre de cette classe doit également être sérialisable. Java descendent de l'arbre de tous les objets référencés par le vôtre et sérialiser chacun à leur tour.
Si vous voulez avoir plus de contrôle sur la façon dont les objets sont sérialisés, vous pouvez implémenter l'interface Externalizable:
Si vous implémentez une classe qui doit être sérialisable, vous devez également fournir une méthode qui ne la sérialisation dans la même classe.
Vous ne pouvez pas compter sur un Objet pour être en mesure de deviner ce que votre classe doit être sérialisé avec succès et désérialisé. Pensez au travail des variables de votre classe, par exemple, qui n'ont pas besoin d'être sérialisé, l'Objet ne serait pas en mesure de différencier ces de la domaines importants.