Was ist der Unterschied zwischen einem Marshaller und einem Serializer?

20

... und Entsortieren / Deserialisieren? Die Erklärung von Wikipedia lässt mich nicht mehr los! Ich bin ein Java-Programmierer, falls die Terminologie in verschiedenen Sprachen unterschiedlich verwendet wird.

Gischt
quelle

Antworten:

30

Semantik ist hier wichtig:

Marshalling bedeutet , dass die Daten verschoben werden. Dies bedeutet jedoch nicht, dass die Daten aus ihrer systemeigenen Darstellung oder Speicherung transformiert werden. Java-Objekte können in ihrer nativen Darstellung über die Leitung gemarshallt werden.

Beim Serialisieren werden die Daten in eine nicht native Zwischendarstellung umgewandelt. Beispiel: Umwandlung eines Java-Objekts in JSON oder XML.

Natürlich sind die meisten Systeme , dass Marshal Daten, Serialize es bis zu einem gewissen nicht-nativen Format , bevor sie es transportieren.

JimmyJames
quelle
13

Diese Frage wurde schon einmal gestellt, jedoch auf StackOverflow. Hier ist der Link.

Zitat der Antwort von Jeffrey Hantin :

Marshaling und Serialisierung sind im Kontext von Remoteprozeduraufrufen lose synonym, aber semantisch absichtlich unterschiedlich.

Beim Marshalling geht es insbesondere darum, Parameter von hier nach dort zu übertragen, während bei der Serialisierung strukturierte Daten in oder aus einer primitiven Form wie einem Bytestrom kopiert werden. In diesem Sinne ist die Serialisierung ein Mittel zum Durchführen von Marshalling, wobei normalerweise eine Semantik für das Weitergeben von Werten implementiert wird.

Es ist auch möglich, dass ein Objekt per Referenz gemarshallt wird. In diesem Fall handelt es sich bei den Daten "auf der Leitung" lediglich um Standortinformationen für das ursprüngliche Objekt. Ein solches Objekt kann jedoch weiterhin für die Wertserialisierung geeignet sein.

Wie @Bill erwähnt, kann es zusätzliche Metadaten geben, wie z. B. den Ort der Codebasis oder sogar den Code für die Objektimplementierung.

alegen
quelle
2

Ein Marshaller tut alles, was er braucht, um eine Datenstruktur zu erstellen, die von einem Ort zum anderen transportiert werden soll. Wenn ich von "Datenstruktur" spreche, kann das alles sein. Von einem Objekt selbst (Statusdaten => Feldwerte) zu einer Speicherreferenz auf das Objekt, das auf der Clientseite von einem "Stub" und auf der Serverseite von einem "Proxy" behandelt wird. Dies bedeutet, dass ein Marshaller "Serializer" verwenden könnte, um diese Datenstruktur in eine Darstellung auf niedriger Ebene umzuwandeln, die viel einfacher zu transportieren ist. Der Transformationspfad kann weitere Komponenten wie Kompressoren, Compiler, Adapter usw. enthalten. Für mich ist ein Serializer Teil des Marshaller.

HABOT QDroid
quelle