166 votes

Que signifie Serializable ?

Qu'est-ce que cela signifie exactement pour une classe d'être Serializable en Java ? Ou en général, d'ailleurs...

12 votes

@skaffman Voici ce que ça dit pour la classe 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.

41 votes

Une excellente explication si vous savez déjà ce que signifient sérialisé et désérialisé. (Ce n'est pas un compliment.) De telles définitions vous aident à mieux comprendre le problème sur le plan technique une fois, et une seule fois, que vous avez déjà quelques connaissances à ce sujet.

0 votes

@RitwikBose Donc, java.io.Serializable est une interface de tag.

158voto

Oded Points 271275

Sérialisation consiste à persister un objet de la mémoire à une séquence de bits, par exemple pour le sauvegarder 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, il s'agit d'une interface qui, si elle est mise en œuvre dans une classe, cette classe peut automatiquement être sérialisée et désérialisée par différents sérialiseurs.

2 votes

Notez également que tous les champs qui ne sont pas explicitement marqués autrement seront également sérialisés. Cela signifie que vous pouvez sauvegarder facilement une structure de données complexe en sérialisant simplement l'objet Root.

1 votes

Ainsi, lorsque nous parlons d'"objets", voulons-nous parler de l'objet instancié par une classe, ou simplement des "objets logiciels" tels que les assemblages, les fichiers, etc. Et dans ce dernier cas, s'agit-il simplement d'un moyen standardisé d'envoyer des données entre programmes et environnements ?

1 votes

@Sunburst275 - dans ce cas, il s'agit de la représentation en mémoire d'une classe en mémoire - c'est-à-dire une instance d'une classe (il n'y a pas vraiment d'intérêt à parler de sérialisation des assemblages, car ils sont généralement sur le disque sous forme de fichiers qui peuvent simplement être envoyés tels quels).

43voto

David Points 2133

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 avoir lieu dans une autre instance du programme, voire sur une autre machine. La sérialisation (dans n'importe quel langage) implique cependant toutes sortes de problèmes, en particulier lorsque vous avez des références à d'autres objets à l'intérieur de l'objet sérialisable.

13voto

Jigar Joshi Points 116533

La sérialisation consiste à enregistrer l'état actuel d'un objet dans un flux et à restaurer un objet équivalent à partir de ce flux. Le flux fonctionne comme un conteneur pour l'objet

1 votes

Cette définition semble plus précise. Merci.

6voto

AphexMunky Points 180

Serializable est appelé comme une interface mais c'est plus comme un drapeau pour le sous-système de sérialisation, au moment de l'exécution. Il dit que cet objet peut être sauvegardé. Toutes les variables d'instance des objets, à l'exception des objets non sérialisables et de ceux qui sont marqués comme volatiles, seront sauvegardées.

Imaginez que votre application puisse changer de couleur en option, sans conserver ce paramètre externe, vous devriez changer la couleur à chaque fois que vous l'exécutez.

6 votes

Il ne s'agit pas d'un "drapeau pour le compilateur". Il s'agit d'un indicateur destiné au sous-système de sérialisation, au moment de l'exécution.

1 votes

@EJP - Merci, je ne le savais pas.

0 votes

Sauf votre respect, pourquoi l'écrire si vous ne savez pas si c'est vrai ? Vous avez également omis le mot "transitoire". Dans l'ensemble, une mauvaise réponse, désolé.

4voto

Mdhar9e Points 459

La sérialisation est une technique permettant de stocker ou d'écrire les objets et les données dans des fichiers. En utilisant ObjectOutputStream y FileOutputStream classes. Ces classes ont leurs méthodes spécifiques pour faire persister les objets, par exemple writeObject();

pour une explication claire et chiffrée. Voir ici pour plus d'informations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X