Qu'est-ce que la sérialisation?

149

Je débute avec la programmation orientée objet (POO) et j'aimerais savoir: quelle est la signification de la sérialisation dans le langage POO?

Communauté
la source
Jetez aussi un coup d' œil à cet article qui explique pourquoi ne pas utiliser sérialisation codeproject.com/KB/dotnet/noserialise.aspx
Nipuna
4
Cet article est BS complet, d'où sa note.
RedAces
N'est-ce pas le genre de questions trop larges qui sont généralement supprimées, car une recherche sur Google donnerait une réponse instantanée?
arvymetal
2
@arvymetal vous aviez raison. C'était le premier résultat quand j'ai cherché sur
Google

Réponses:

143

La sérialisation est le processus de transformation d'un objet en mémoire en un flux d'octets afin que vous puissiez faire des choses comme le stocker sur le disque ou l'envoyer sur le réseau.

La désérialisation est le processus inverse: transformer un flux d'octets en un objet en mémoire.

Andrew Barnett
la source
46
De plus, les verbes Marshalet Unmarshalsont synonymes de Serializeet Deserialize.
wulfgarpro
4
Un objet en mémoire n'est-il pas déjà représenté sous forme d'octets au niveau le plus bas?
mahacoder
3
Un objet en mémoire sera formaté par le compilateur, le système d'exploitation et / ou le matériel. Changez votre compilateur et vous changez votre format. Un objet sérialisé aura un format défini par votre code, vous pouvez donc garantir le format. Ceci est également utile lors de l'envoi d'objets sur un réseau - la machine réceptrice peut avoir une architecture complètement différente (et donc une représentation en mémoire).
Andrew Barnett
1
Alors ça le transforme en une chaîne?
NoName
1
Une chaîne peut être un format valide, mais il n'est pas nécessaire que ce soit une chaîne. Les chaînes elles-mêmes ont différents formats (ASCII, UTF8, UTF16, EBCDIC ...) et démontrent en fait assez bien le concept. La chaîne (un objet en mémoire) abcserait sérialisée comme 0x61 0x62 0x63(ASCII) ou 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - avec ou sans des éléments tels que des terminateurs NUL ou des longueurs codées.
Andrew Barnett
91

En termes simples, la sérialisation est un processus de conversion d'un objet en flux d'octets afin qu'il puisse être transféré sur un réseau ou stocké dans un stockage persistant.

La désérialisation est exactement le contraire - Récupérez un flux d'octets à partir du stockage réseau ou de persistance et reconvertissez-le en objet avec le même état .

La chose à comprendre est comment ces flux d'octets sont interprétés ou manipulés pour que nous obtenions exactement le même objet / même état. Il existe différentes manières d'y parvenir. Certains d'entre eux sont -

  1. XML : Convertissez un objet en XML, transférez-le sur un réseau ou stockez-le dans un fichier / db. Récupérez-le et reconvertissez-le en objet avec le même état. En Java, nous utilisons la bibliothèque JAXB (architecture Java pour la liaison XML) (à partir de java 6, elle est fournie avec JDK).
  2. JSON : La même chose peut être faite en convertissant l'objet en JSON (notation d'objet JavaScript). Là encore, il existe une bibliothèque GSON qui peut être utilisée pour cela.
  3. Ou nous pouvons utiliser la sérialisation fournie par le langage OOP lui-même. Par exemple, en Java, vous pouvez sérialiser un objet en le faisant implémenter Serializable interfaceet en l'écrivant dans Object Stream.
Aniket Thakur
la source
@AniketThakur Une très bonne explication, pouvez-vous également me fournir un lien pour que je puisse en apprendre à JSONpartir de zéro, car je n'en sais rien
Kasun Siyambalapitiya
chaque fois que nous parlons de sérialisation, pourquoi nous nous référons toujours à Object uniquement. Nous ne pouvons pas utiliser la sérialisation en langage fonctionnel où nous n'avons aucun objet plutôt que nous utilisons des fichiers à transférer sur le réseau.
Pardeep Sharma
1
Tout d'abord, pourquoi avons-nous besoin de convertir un objet en flux d'octets et inversement? Pourquoi n'est-ce pas une opération implicite pour un utilisateur qui essaie de le faire?
Aparna Chaganti
1
Si nous pouvons utiliser JSON ou XML, pourquoi avons-nous besoin de les convertir en octets de flux? Et puis nous les stockons uniquement dans JSOn ou XML au lieu de les convertir en octets.
Muhammad Faizan tarifé le
78

Explication simple via l'image:

Rex, mon chien, est sérialisé!

Explication par analogie:

Supposons que je parle à mon copain au téléphone et que je lui parle de mon nouveau chiot.

Voici mon problème: le chiot est un mammifère vivant et respirant. Comment suis-je censé transporter un chiot sur la ligne téléphonique? Je ne peux pas physiquement mettre mon chiot dans mon récepteur téléphonique.

Donc à la place, je vais devoir transmettre une représentation du chiot au téléphone. En d'autres termes, je sérialise ensuite mon chien Rex, et je lui envoie la version sérialisée de Rex par téléphone:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

C'est une représentation parfaite - une sérialisation de mon chien.

Résumé:

La sérialisation signifie essentiellement transformer mon chien Rex en quelque chose d'autre - un objet JSON - qui peut ensuite être transporté sur la ligne téléphonique sous forme d'une série de 1 et de 0. Mon copain à New York peut ensuite traduire ces 1 et 0 en un objet JSON - afin qu'il ait une représentation parfaite de mon chien Rex.

BKSpurgeon
la source
16

Vérifiez ceci, cela vous donnera une bonne explication:

http://en.wikipedia.org/wiki/Serialization

Je pense que l'utilisation la plus courante du terme sérialisation a à voir avec la conversion d'un objet binaire en une représentation XML (ou autre chaîne) afin qu'il puisse être stocké dans une base de données / fichier ou envoyé sur un réseau lors d'un appel de service Web. La désérialisation est le processus inverse - la conversion d'un XML / chaîne en un objet.

EDIT: Un autre terme que vous pourriez rencontrer est marshalling / unmarshalling. Le marshalling est fondamentalement le même concept que la sérialisation, et unmarshalling est le même que la désérialisation.

Andy White
la source
3
Pas nécessairement juste du XML, cela peut être n'importe quelle représentation, même une représentation binaire
Matthew Farwell
7

La sérialisation est le processus de conversion d'un objet en un flux d'octets pour stocker l'objet ou le transmettre à la mémoire, à une base de données ou à un fichier. Son objectif principal est de sauvegarder l'état d'un objet afin de pouvoir le recréer en cas de besoin. Le processus inverse est appelé désérialisation.

...

Cette illustration montre le processus global de sérialisation

Processus global de sérialisation

...

Grâce à la sérialisation, un développeur peut effectuer des actions telles que l'envoi de l'objet à une application distante au moyen d'un service Web, le passage d'un objet d'un domaine à un autre, le passage d'un objet à travers un pare-feu sous forme de chaîne XML, ou le maintien de la sécurité ou spécifique à l'utilisateur informations sur les applications

De https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(c'est moi qui souligne)

Chamin Wickramarathna
la source
5

La sérialisation est le processus de conversion de données non ordonnées (comme un objet) en une série de jetons qui peuvent être utilisés plus tard pour reconstruire les données d'origine. Le formulaire sérialisé est le plus souvent une chaîne de texte, mais ce n'est pas obligatoire.

Dave Sherohman
la source
2

la sérialisation consiste à convertir un objet en séquence de bits stockable.

afin que vous puissiez enregistrer cette séquence dans un fichier, une base de données ou l'envoyer sur le réseau.

plus tard, vous pouvez le désérialiser en objet réel et le réutiliser quand vous le souhaitez.

Les services Web et AJAX sont l'exemple le plus courant de sérialisation. Les objets sérialisés avant d'envoyer la réponse au client.

Canavar
la source
1

la sérialisation n'est rien d'autre que le transfert de l'objet pris en charge par java vers un formulaire pris en charge par un fichier

                         (OR)

la conversion du formulaire pris en charge par java en un formulaire pris en charge par le réseau ... la portée principale de la sérialisation n'est rien d'autre que le transfert des données d'une couche à une autre couche ... seuls les objets sérialisés que nous pouvons envoyer sur le réseau.

sriiii
la source
1

La sérialisation est le processus de conversion d'un objet pris en charge par Java, C # ou tout autre (langages OOP) en une forme transportable. De cette façon, il sera transporté sur le réseau ou stocké sur un disque. Pour qu'une classe soit sérialisable, elle doit implémenter une interface sérialisable.

Nesan Mano
la source
non seulement limité à Java ou C #, dans la plupart des langages de programmation, nous utilisons la sérialisation. Par exemple, en python, le module pickle est utilisé pour la même chose.
Pardeep Sharma
0

La sérialisation transforme les données en une "chaîne" linéaire d'octets.

D'autres ont dit plus ou moins la même chose, mais je souligne que les modèles informatiques exigent que les données tiennent dans la RAM à adressage unidimensionnel ou le stockage persistant.

La plupart des éléments qui sont des "données" sont sérialisables par nature (même si vous devez réduire le modèle abstrait à un modèle linéaire); ne sont pas sérialisables, disons une connexion réseau ou une machine basée sur des états compliquée comme un analyseur syntaxique.

Survolé
la source
0

la sérialisation concerne la conversion d'un objet binaire en une représentation XML (ou autre chaîne) afin qu'il puisse être stocké dans une base de données / fichier ou envoyé sur un réseau lors d'un appel de service Web. La désérialisation est le processus inverse - la conversion d'un XML / chaîne en un objet.

viswanathan
la source
0

Lors de l'instanciation (construction) de l'objet réel (la chose) à partir d'une classe (plan), il est nécessaire de sauvegarder l'objet (chose) en le sérialisant (en le décomposant en sa structure atomique de base) dans un espace en mémoire. (Un peu comme Star Treks Transporter). Vous divisez la chose en un flux d'informations qui peuvent être transportées quelque part et stockées. Ensuite, lorsque vous souhaitez reconstruire la chose, il vous suffit de retirer l'instance stockée de manière atomique dans l'objet. Différent de l'instaniation.

David K ​​Hill
la source
0

La sérialisation est le processus de conversion d'un objet en flux de données binaires afin qu'il puisse être stocké dans un fichier ou envoyé sur un réseau où il peut être ressuscité vers le même objet.

Ce document devrait vous aider à comprendre la sérialisation Java en détail.

Nikhil Katre
la source
-1

La sérialisation est lorsque l'objet (un morceau de mémoire) traduit sous une forme lorsque l'état de l'objet peut être enregistré dans un fichier (à titre d'exemple).

Il suffit de le traiter comme de la fabrication de cookies - l'objet est une pâte, le cookie - est une pâte sérialisée.

Ainsi, en "sérialisant", vous pouvez envoyer un cookie à votre ami.

Quelque chose comme ca :-)

Monsieur ElectroNick
la source
4
... sauf que les cookies ne peuvent pas être reconvertis en pâte (désérialisé).
Dave Sherohman