Quelle est la différence entre un marshaller et un sérialiseur?


20

... et unmarshalling / désérialisation? L'explication de Wikipédia ne me laisse pas plus sage! Je suis un programmeur Java, au cas où la terminologie est utilisée différemment dans différentes langues.

Réponses:


30

La sémantique est importante ici:

Le marshaling implique le déplacement des données, il n'implique pas la transformation des données de leur représentation ou stockage natif. Les objets Java peuvent être marshalés sur le fil dans leur représentation native.

La sérialisation implique la transformation des données en une représentation intermédiaire non native. Par exemple: transformer un objet Java en JSON ou XML.

Bien sûr, la plupart des systèmes qui marshalent les données, les sérialisent dans un format non natif avant de les transporter.


13

Cette question a déjà été posée, mais sur StackOverflow. Voici le lien.

Citation de la réponse donnée par Jeffrey Hantin :

Le marshaling et la sérialisation sont vaguement synonymes dans le contexte de l'appel de procédure à distance, mais sémantiquement différents par question d'intention.

En particulier, le marshaling consiste à obtenir des paramètres d'ici à là, tandis que la sérialisation consiste à copier des données structurées vers ou depuis une forme primitive telle qu'un flux d'octets. En ce sens, la sérialisation est un moyen d'effectuer le marshaling, implémentant généralement une sémantique passe-par-valeur.

Il est également possible qu'un objet soit marshalé par référence, auquel cas les données "sur le fil" sont simplement des informations de localisation pour l'objet d'origine. Cependant, un tel objet peut toujours être soumis à une sérialisation de valeur.

Comme @Bill le mentionne, il peut y avoir des métadonnées supplémentaires telles que l'emplacement de la base de code ou même le code d'implémentation d'objet.


2

Un Marshaller fait tout ce qu'il faut pour couler une structure de données à transporter d'un endroit à un autre. Quand je parle de "structure de données", cela peut être n'importe quoi. D'un objet lui-même (état des données => valeurs de champ) à une référence mémoire à cet objet qui sera géré côté client par un "Stub" et côté serveur par un "Proxy". Cela signifie qu'un Marshaller pourrait utiliser des «sérialiseurs» pour transformer cette structure de données en une représentation de bas niveau beaucoup plus facile à transporter. Le chemin de transformation pourrait avoir d'autres composants comme des compresseurs, des compilateurs, des adaptateurs, etc. Pour moi, un sérialiseur fait partie du Marshaller.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.