Que signifie exactement pour une classe d'être Serializable
en Java? Ou en général, d'ailleurs ...
java
serializable
Ritwik Bose
la source
la source
Serializable
:Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
Réponses:
La sérialisation consiste à conserver un objet de la mémoire vers une séquence de bits, par exemple pour enregistrer sur le disque. La désérialisation est le contraire: lire les données du disque pour hydrater / créer un objet.
Dans le contexte de votre question, c'est une interface qui, si elle est implémentée dans une classe, cette classe peut être automatiquement sérialisée et désérialisée par différents sérialiseurs.
la source
Bien que la plupart des utilisateurs aient déjà donné la réponse, mais je voudrais ajouter un exemple pour ceux qui en ont besoin afin d'expliquer l'idée:
Disons que vous avez une personne de classe comme celle-ci:
puis vous créez un objet comme celui-ci:
Vous pouvez sérialiser cet objet en plusieurs flux. Je vais faire cela à deux flux:
Sérialisation vers la sortie standard:
Sérialisation vers un fichier:
Ensuite:
Désérialiser du fichier:
la source
Cela signifie que les instances de la classe peuvent être transformées en un flux d'octets (par exemple, pour être enregistrées dans un fichier), puis reconverties en classes. Ce rechargement peut se produire dans une instance différente du programme, ou même sur une machine différente. La sérialisation (dans n'importe quelle langue) implique toutes sortes de problèmes, cependant, surtout lorsque vous avez des références à d'autres objets dans celui qui est sérialisable.
la source
Voici une explication détaillée de la sérialisation : (mon propre blog)
Sérialisation:
La sérialisation est le processus de sérialisation de l'état d'un objet représenté et stocké sous la forme d'une séquence d'octets. Cela peut être stocké dans un fichier. Le processus pour lire l'état de l'objet à partir du fichier et le restaurer est appelé désérialisation.
Quel est le besoin de sérialisation?
Dans l'architecture moderne, il est toujours nécessaire de stocker l'état de l'objet, puis de le récupérer. Par exemple dans Hibernate, pour stocker un objet, nous devons rendre la classe Serializable. Ce qu'il fait, c'est qu'une fois que l'état de l'objet est enregistré sous forme d'octets, il peut être transféré vers un autre système qui peut ensuite lire l'état et récupérer la classe. L'état de l'objet peut provenir d'une base de données ou d'un autre jvm ou d'un composant séparé. Avec l'aide de la sérialisation, nous pouvons récupérer l'état de l'objet.
Exemple de code et explication:
Jetons d'abord un coup d'œil à la classe d'objets:
Dans le code ci-dessus, on peut voir que la classe Item implémente Serializable .
C'est l'interface qui permet à une classe d'être sérialisable.
Nous pouvons maintenant voir une variable appelée serialVersionUID est initialisée en variable Long. Ce nombre est calculé par le compilateur en fonction de l'état de la classe et des attributs de classe. C'est le nombre qui aidera le jvm à identifier l'état d'un objet lorsqu'il lit l'état de l'objet à partir du fichier.
Pour cela, nous pouvons consulter la documentation officielle d'Oracle:
Si vous avez remarqué qu'un autre mot-clé que nous avons utilisé est transitoire .
Si un champ n'est pas sérialisable, il doit être marqué comme transitoire. Ici, nous avons marqué le itemCostPrice comme transitoire et ne voulons pas qu'il soit écrit dans un fichier
Voyons maintenant comment écrire l'état d'un objet dans le fichier, puis le lire à partir de là.
Dans ce qui précède, nous pouvons voir un exemple de sérialisation et de désérialisation d'un objet.
Pour cela, nous avons utilisé deux classes. Pour sérialiser l'objet, nous avons utilisé ObjectOutputStream. Nous avons utilisé la méthode writeObject pour écrire l'objet dans le fichier.
Pour la désérialisation, nous avons utilisé ObjectInputStream qui lit l'objet à partir du fichier. Il utilise readObject pour lire les données d'objet à partir du fichier.
La sortie du code ci-dessus serait comme:
Notez que itemCostPrice de l'objet désérialisé est nul car il n'a pas été écrit.
la source
La sérialisation implique l'enregistrement de l'état actuel d'un objet dans un flux et la restauration d'un objet équivalent à partir de ce flux. Le flux fonctionne comme un conteneur pour l'objet
la source
Serializable est appelé comme une interface, mais c'est plutôt un indicateur du sous-système de sérialisation, au moment de l'exécution. Il dit que cet objet peut être enregistré. Toutes les variables d'instance Objects, à l'exception des objets non sérialisables et de celles marquées comme volatiles, seront enregistrées.
Imaginez que votre application puisse changer de couleur en option, sans garder ce paramètre externe, vous devrez changer la couleur à chaque fois que vous l'exécutez.
la source
La sérialisation est une technique de stockage ou d'écriture des objets et des données dans des fichiers. En utilisant
ObjectOutputStream
etFileOutputStream
classes. Ces classes ont leurs méthodes spécifiques pour conserver les objets. commewriteObject();
pour une explication claire avec des chiffres. Voir ici pour plus d'informations
la source
Présenter sous un autre angle. La sérialisation est une sorte d'interface appelée «interface de marqueur». Une interface de marqueur est une interface qui ne contient aucune déclaration de méthode, mais désigne simplement (ou «marque») une classe qui implémente l'interface comme ayant une propriété. Si vous comprenez le polymorphisme, cela aura beaucoup de sens. Dans le cas de l'interface de marqueur Serializable, la méthode ObjectOutputStream.write (Object) échouera si son argument n'implémente pas l'interface. Il s'agit d'une erreur potentielle en java, cela aurait pu être ObjectOutputStream.write (Serializable)
Hautement recommandé: Lisez l'article 37 de Effective Java de Joshua Bloch pour en savoir plus.
la source
Sérialisation: écriture de l'état de l'objet dans un fichier / réseau ou n'importe où. (Signalez le formulaire pris en charge par l'objet Java au formulaire pris en charge par fichier ou le formulaire pris en charge par le réseau)
Désérialisation: lecture de l'état de l'objet depuis un fichier / réseau ou n'importe où. (Formulaire moyen de fichier / réseau pris en charge vers formulaire pris en charge par objet Java)
la source
Juste pour ajouter aux autres réponses et en ce qui concerne la généralité. La sérialisation est parfois appelée archivage, par exemple en Objective-C.
la source