Wie funktioniert die Ruby-Serialisierung (Marshalling)?

9

Ich habe einige Informationen zu dem Thema gefunden ( wie dieser Link) , aber nichts, das mir sagt, wie es tatsächlich funktioniert unter der Decke. Wenn Sie den folgenden Aufsatz nicht lesen möchten, hier sind die echten Fragen:

  1. Wie soll ich die Methoden marshal_dump und marshal_load implementieren? Sogar ein einfaches Beispiel reicht.

  2. Wenn marshal_load aufgerufen wird, wie weiß es dann, welche Art von Objekt erstellt werden soll? Wenn es mehrere Objekte desselben Typs in der Datei gibt, wie können Sie feststellen, welche welche ist? Ich bin offensichtlich verwirrt ...

  3. Wenn ich ein Objekt habe, das ein Bild darstellt, gibt es eine andere Möglichkeit, es auf die Festplatte zu schreiben?

Mein spezifisches Problem ist das:

Es ist ein bisschen kompliziert, weil ich nicht den Quellcode für das Objekt habe, das ich serialisieren möchte.

Ich arbeite an einer Mod zu einer Spiele-Engine (RPG Maker VX mit der RGSS2-Spielebibliothek). Es gibt eine Klasse namens Bitmap, die zur API (closed source) gehört. Ich möchte dieses Objekt / Bild zwischen den Spielen speichern, also muss ich es in die Sicherungsdatei serialisieren. Ich bin kein Ruby-Pro, aber ich weiß, dass ich zwei Methoden definieren kann ( marshal_dump und marshal_load ), die vom Modul "Marshal" aufgerufen werden, wenn ich versuche, das Objekt zu serialisieren.

Das Problem ist, dass ich nicht weiß, wie ich die zwei erforderlichen Methoden implementieren kann. Ich kann sie einfach als leere Methoden belassen und es scheint zu funktionieren, aber das Objekt ist tatsächlich entsorgt und die Bilddaten sind verschwunden. Außerdem verstehe ich nicht, was es intern macht und offensichtlich ist das Erstellen leerer Methoden einfach falsch.

Kann mir jemand sagen, wie das Zeug intern funktioniert? Ich denke, das würde mir helfen, mein Problem zu lösen. Gibt es darüber hinaus noch eine andere Art von Bildformaten, die ich einfach in einer Datei speichern und vermeiden könnte, meine eigene Serialisierung durchzuführen?

    
Ed S. 04.01.2009, 00:50
quelle

2 Antworten

8

Die Ruby-Marshalling-Methoden speichern den Typ des Objekts, für das sie kodieren. Die Art, wie diese zwei Haken funktionieren, ist wie folgt:

  • marshal_dump muss einige Daten zurückgeben, die den Zustand Ihres Objekts beschreiben. Ruby ist das Format dieser Daten egal - es muss nur etwas sein, das Ihre marshal_load -Methode verwenden kann, um den Status des Objekts zu rekonstruieren.

  • marshal_load wird für das Marshalled-Objekt aufgerufen, unmittelbar nachdem es neu erstellt wurde. Es ist im Grunde die Initialisierungsmethode für ein Marshalled-Objekt. Es hat das Objekt, das marshal_dump zurückgegeben hat, passiert und muss diese Daten verwenden, um seinen Zustand zu rekonstruieren.

Hier ist ein Beispiel:

%Vor%     
Chuck 04.01.2009, 02:10
quelle
0

Sie können numerische Rohdaten mit NArray wie folgt serialisieren:

%Vor%     
wedesoft 17.10.2016 09:21
quelle

Tags und Links