2008-09-30 11 views
42

J'ai souvent entendu ce concept, mais je ne sais pas très bien de quoi il s'agit.Qu'est-ce que le marshaling d'objets?

+0

vous devriez vraiment ajouter un peu plus à cela, comme le contexte que vous recherchez. Exemple, un exemple: le marshalling in .net est le processus de traduction des données des types gérés en types non gérés pour le franchissement des frontières. Il pourrait également être utilisé dans plusieurs autres contextes. – mattlant

+0

@mattlant: Marshalling signifie la même chose dans tous les cas. Ce ne sont que des implémentations différentes. – GEOCHET

Répondre

30

Conversion d'un objet en mémoire dans un format qui peut être écrit sur le disque, ou envoyé sur le fil, etc.

Wikipedia's description.

+16

Apparemment, c'est la définition de «sérialisation»; 'marshalling' est légèrement différent: http://stackoverflow.com/questions/770474/what-is-the-difference-between-serialization-and-marshalling –

+0

@StephThirion Voulez-vous dire qu'un objet, s'il n'est pas sérialisé, peut simplement avoir un état , il n'y aura pas de base de code c'est-à-dire qu'aucune de ses fonctions ne peut être appelée, c'est juste un type de données structuré. Et, si le même objet est rassemblé alors il aura sa base de code avec la structure et on peut appeler ses fonctions? – bjan

33

Je ne suis pas d'accord, Wikipedia est assez clair à ce sujet.

En informatique, de triage (similaire à la sérialisation) est le processus de transformer la représentation mémoire d'un objet à un ensemble de données format adapté à la transmission ou le stockage . Il est généralement utilisé lorsque les données doivent être déplacées entre différentes parties d'un programme d'ordinateur ou d'un programme à un autre.

http://en.wikipedia.org/wiki/Marshalling_(computer_science)

+19

Qu'est-ce qui vous désapprouve? –

+0

La définition peut cependant varier légèrement en fonction du contexte. – david

+2

@david: Définition! = Implémentation. – GEOCHET

1

Cela signifie transformer les données en un autre type de données à transférer vers un autre système. Par exemple, en rassemblant une structure dans un document XML à envoyer au service Web ou en rassemblant un pointeur à envoyer à un appartement de threads différent.

1

Dans un sens très générique en programmation, cela signifie simplement prendre des données dans un format et les transformer en un format acceptable par un autre sous-système.

3

J'ai clarifié une recherche de google à "rassemblement de données" et le premier coup était on some place called webopedia qui est plutôt bon. L'essentiel est que vous transformez les données en un formulaire pour des choses comme la transmission sur un réseau. Le problème qu'il résout est que vous ne pouvez pas vraiment transmettre des données sur un réseau sous une forme qui est utilisable par un programme. Vous devez résoudre un certain nombre de problèmes, y compris l'endianisme des données, comment stocker les types de données complexes comme les chaînes, etc.

Le regroupement ne sert pas seulement à résoudre les problèmes de transmission réseau, mais d'autres problèmes tels que le passage d'une architecture à l'autre , peut-être différentes langues en particulier celles qui pourraient utiliser des choses comme des machines virtuelles, et d'autres problèmes de "traduction".

3

Marshalling est le processus de transformation de la représentation de la mémoire d'un objet en un format de données pouvant être stocké ou transmis. Il est également appelé serialization (bien qu'il puisse être différent dans certains contextes). La représentation de la mémoire de l'objet peut être stockée en tant que binaire ou XML ou tout format approprié pour le stockage et/ou la transmission d'une manière qui vous permet de le démouler et de récupérer l'objet original. Pour un exemple d'utilisation, si vous avez un jeu en ligne avec des composants client et serveur et que vous vouliez envoyer l'objet joueur contenant les stats joueur et les coordonnées monde du client vers le serveur (ou l'inverse), vous pouvez simplement le rassembler sur le client, l'envoyer sur le réseau et le démasquer à l'autre extrémité et il apparaîtra pour le serveur comme si l'objet avait été créé sur le serveur lui-même. Voici un exemple ruby:

srcplayer = Player.new 
# marshal (store it as string) 
str = Marshal.dump(srcplayer) 
#unmarshal (get it back) 
destplayer = Marshal.load(str) 
2

Fondamentalement, il y a une expression pour la transformation de façon générique un objet (ou similaire) en une autre représentation que (par exemple) peut être envoyé sur le fil ou stockées sur le disque (typiquement chaîne ou un flux binaire.Le contraire, unmarshalling, décrit la direction opposée de la lecture de la représentation rassemblée et de la recréation d'un objet ou de n'importe quelle structure en mémoire déjà existante.

Un autre exemple tous les jours en cours est JSON

3

sérialisation est le processus de transfert de données à travers les frontières d'application ou entre les différents formats de données. La marchage est très courante, par exemple l'écriture de données sur disque ou dans une base de données est technique, mais le terme tend à être utilisé pour décrire la conversion de données pour des API "étrangères" ou pour une communication interprocessus. Par exemple, dans .NET, la communication entre le code managé et non managé (comme l'accès à certaines API win32) nécessitera probablement une mise en forme afin de convertir les objets C# gérés et les objets de style C/C++ (structures, poignées , tampons de sortie, etc.) L'aide pour le Marshal class statique pourrait être utile.

10

Les gens ont déjà défini la fonction de rassemblement, alors je passerai à la définition et passerai à un exemple.

L'appel de procédure distante utilise le marshalling. Lorsque vous appelez des fonctions distantes, vous devez rassembler les arguments dans un format standard afin qu'il puisse être transporté sur le réseau.

Questions connexes