2008-09-30 17 views
42

Ich habe gehört, dass dieses Konzept häufig verwendet wird, aber ich habe kein wirklich gutes Verständnis davon, was es ist.Was ist Objekt-Marshalling?

+0

sollten Sie wirklich ein wenig mehr hinzufügen, wie zum Beispiel den Kontext, den Sie suchen. Ein Beispiel: Das Marshalling in .net ist der Prozess, bei dem Daten von verwalteten Typen in nicht verwaltete Typen übertragen werden, um Grenzen zu überschreiten. Es könnte auch in mehreren anderen Kontexten verwendet werden. – mattlant

+0

@matlant: Marshalling bedeutet in jedem Fall das Gleiche. Das sind nur verschiedene Implementierungen. – GEOCHET

Antwort

30

Konvertieren eines Objekts im Speicher in einem Format, das auf die Platte geschrieben werden können, oder über den Draht geschickt usw.

Wikipedia's description.

+16

Offenbar ist das die Definition von "Serialisierung"; "Marshalling" ist etwas anders: http://stackoverflow.com/questions/770474/what-is-the-difference-between-serialization-and-marshalling –

+0

@StephThirion Meinst du ein Objekt, wenn unserialisiert, kann nur einen Zustand haben Es wird keine Codebasis geben, dh es kann keine Funktion aufgerufen werden, es ist nur ein strukturierter Datentyp. Und wenn das gleiche Objekt gemarshallt wird, dann wird es seine Codebasis zusammen mit der Struktur haben und man kann seine Funktionen aufrufen? – bjan

33

Ich bitte zu unterscheiden, Wikipedia ist ziemlich klar zu diesem Thema.

In der Informatik (ähnlich Serialisierung) Rangier ist der Prozess die Speicher Darstellung eines Objekts in ein Datum geeignetes Format zur Speicherung oder Übertragung von transformieren. Es wird normalerweise verwendet, wenn Daten zwischen verschiedenen Teilen eines Computerprogramms oder von einem Programm zu einem anderen verschoben werden müssen.

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

+19

Womit sind Sie nicht einverstanden? –

+0

Die Definition kann jedoch je nach Kontext leicht variieren. – david

+2

@david: Definition! = Implementierung. – GEOCHET

1

Es ist alle Daten in einer anderen Datentyp zu einem anderen System zu übertragen drehen.

Zum Beispiel das Rangieren einer Struktur in ein XML-Dokument, das an den Webservice gesendet wird, oder das Rangieren eines Zeigers zum Senden an ein anderes Thread-Apartment.

1

In einem sehr generischen Sinn in der Programmierung bedeutet es einfach, Daten in einem Format aufzunehmen und in ein Format zu konvertieren, das von einem anderen Subsystem akzeptiert wird.

3

Ich erklärte eine Google-Suche zu "Data Marshalling" und der erste Treffer war on some place called webopedia, die ziemlich gut ist. Das Wesentliche ist, dass Sie Daten in ein Formular für Dinge wie Übertragung über ein Netzwerk hin und her transformieren. Das Problem, das es löst, ist, dass Sie Daten nicht wirklich über ein Netzwerk in einer Form übertragen können, die von einem Programm verwendet werden kann. Sie müssen eine Reihe von Problemen lösen, darunter Dinge wie Endianität von Daten, wie Sie komplexe Datentypen wie Strings usw. speichern.

Marshalling ist nicht nur zur Lösung von Netzwerkübertragungsproblemen, sondern auch für andere Probleme wie zum Beispiel von einer Architektur zur anderen Vielleicht verschiedene Sprachen, vor allem solche, die Dinge wie virtuelle Maschinen und andere "Übersetzungsprobleme" benutzen könnten.

3

Marshalling ist der Prozess der Umwandlung der Speicherdarstellung eines Objekts in ein Datenformat, das gespeichert oder übertragen werden könnte. Es wird auch serialization genannt (obwohl es in bestimmten Kontexten anders sein könnte). Die Speicherrepräsentation des Objekts könnte als Binär- oder XML-Datei gespeichert werden, oder jedes Format, das für die Speicherung und/oder Übertragung geeignet ist, auf eine Weise, die es ermöglicht, sie zu entpacken und das ursprüngliche Objekt zurückzubekommen.

Für ein Anwendungsbeispiel, wenn Sie ein Online-Spiel mit einem Client und Server-Komponenten haben und das Player-Objekt mit Player-Statistiken und Weltkoordinaten vom Client zum Server senden wollten (oder umgekehrt), Sie könnten es einfach auf dem Client bereitstellen, über das Netzwerk senden und am anderen Ende abmapshalieren, und es würde für den Server erscheinen, als wäre das Objekt auf dem Server selbst erstellt worden. Hier ist ein rubin Beispiel:

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

Im Grunde ist es ein Ausdruck für generisch Transformation eines Objekts (oder ähnlich) in eine andere Darstellung, dass (zum Beispiel) kann über den Draht oder zu speichernden Datenträger gesendet werden (typischerweise Zeichenfolge oder Binärstrom.Das Gegenteil, das Unmarshalling, beschreibt die entgegengesetzte Richtung des Lesens der Marshalled-Repräsentation und das Re-Erstellen eines Objekts oder einer anderen In-Memory-Struktur, die früher existierte.

Ein weiteres aktuelles Beispiel aus dem Alltag ist JSON

3

Rangierung ist der Prozess, der Daten über Anwendungsgrenzen hinweg oder zwischen unterschiedlichen Datenformaten übertragen. Marshalling ist sehr gebräuchlich, zum Beispiel das Schreiben von Daten auf die Festplatte oder in eine Datenbank ist ein technisches Marshalling, jedoch wird der Begriff dazu verwendet, die Datenkonvertierung für "fremde" APIs oder für Interprozesskommunikation zu beschreiben. In .NET zum Beispiel erfordert die Kommunikation zwischen verwaltetem und nicht verwaltetem Code (wie der Zugriff auf bestimmte Win32-APIs) wahrscheinlich ein Marshalling, um zwischen verwalteten C# -Objekten und C/C++ - Stilobjekten (Strukturen, Handles) hin und her zu konvertieren , Ausgangspuffer, etc.) Die Hilfe für die statische Marshal class könnte hilfreich sein.

10

Die Leute haben das Marshalling schon ganz klar definiert, also werde ich die Definition überspringen und auf ein Beispiel springen.

Remote-Prozeduraufruf verwendet Marshalling. Wenn Sie Remotefunktionen aufrufen, müssen Sie die Argumente in ein Standardformat umwandeln, damit sie über das Netzwerk transportiert werden können.