Was ist Serialisierung?

8

Ich habe eine Weile als Hobby programmiert, aber dieses Konzept habe ich erst vor kurzem gesehen. Ich habe mehrfach "Was ist Serialisierung" googelt, aber ich bekomme nie eine Definition, normalerweise nur Beispiele dafür. Ich sehe es in den Ogre-Foren, den Bullet-Foren und in jedem anderen Forum, in das ich gehe. Ich denke, es ist an der Zeit, dass ich wirklich verstehe, was es ist und warum ich es verwenden soll.

Bearbeiten

Zur Verdeutlichung suche ich mehr nach Gründen, warum ich es verwenden soll, insbesondere im Sinne der Spielprogrammierung. In der Bullet Physics-API wird beispielsweise viel über die Serialisierung eines Netzes gesprochen, daher möchte ich verstehen, warum dies so ist.

Vielen Dank :)

Aidan Knight
quelle

Antworten:

7

Aus der Dokumentation zu boost.serialization : Hier verwenden wir den Begriff "Serialisierung", um die reversible Dekonstruktion eines beliebigen Satzes von C ++ - Datenstrukturen in eine Folge von Bytes zu bezeichnen. Ein solches System kann verwendet werden, um eine äquivalente Struktur in einem anderen Programmkontext wiederherzustellen. Abhängig vom Kontext kann dies die Implementierung der Objektpersistenz, die Übergabe von Remote-Parametern oder eine andere Funktion verwenden. In diesem System verwenden wir den Begriff "Archiv", um sich auf ein bestimmtes Rendering dieses Bytestroms zu beziehen. Dies kann eine Datei mit Binärdaten, Textdaten, XML oder einer anderen vom Benutzer dieser Bibliothek erstellten Datei sein.

Mit anderen Worten, Serialisierung ist ein Prozess, der Objekte im Speicher in eine Art Bytestream umwandelt, und Deserialisierung macht das Gegenteil, indem sie einen Bytestream aufnimmt und ihn wieder in Objekte im Speicher umwandelt.

Der Begriff "Serialisierung" impliziert nichts über das Format des Bytestreams. Es kann sich um ein effizient gepacktes Binärformat oder eine lose XML- oder YAML-Beschreibung handeln. Es kann sich sogar um Quellcode in der Originalsprache selbst oder in einer anderen Programmiersprache wie JSON handeln , bei der es sich um eine Teilmenge von JavaScript handelt. Das genaue Format des serialisierten Streams sollte basierend auf Ihrer beabsichtigten Verwendung ausgewählt werden.

Die Serialisierung ist eine integrierte Funktion vieler Sprachen und Umgebungen - zum Beispiel Java und Python . In untergeordneten Sprachen wie C und C ++ müssen Serialisierungsbibliotheken verwendet (oder geschrieben) werden , da der von der Sprache bereitgestellte Mechanismus normalerweise nicht gut genug ist - er kann Zeigern und Referenzen nicht folgen oder serialisieren und unterliegt Endianness-Problemen, z Beispiel.

Wikipedia hat einen anständigen Artikel über Serialisierung.

Die Serialisierung wird in Spielen (und in der gesamten Software) häufig für viele Zwecke verwendet:

  • Laden der Liste aller Zaubersprüche im Spiel aus Ressourcendateien.
  • Spiel speichern und laden.
  • Aufzeichnen des Status von Dingen (z. B. Spielerpositionen und Inventare) in einer SQL- oder Objektdatenbank.
  • Aufrufen von Remote-Funktionsaufrufen über ein Netzwerk oder eine andere IPC-Verbindung.
Gemeinschaft
quelle
6

Nach meinem Verständnis ist Serialisierung nur das Konzept, ein Objekt oder eine Gruppe von Objekten in einen Bytestream (zur Datenspeicherung oder Netzwerkübertragung usw.) umzuwandeln und später das ursprüngliche Objekt aus diesem Bytestream zu rekonstruieren (" Deserialisierung ").

Wunderlich: Es ist ein bisschen wie bei einem Star Trek-Teleporter, jetzt denke ich daran.

Hierfür gibt es eine Reihe von Bibliotheken, die sich jeweils mit den kleinen Problemen befassen, die im Weg stehen (z. B. Bystestream-Endianness und dergleichen).

Kaz Dragon
quelle
Das macht Sinn und ich mag die Teleporter-Analogie sehr, die definitiv hilft, sie zu verstehen, lol. Die Verwendung der Serialisierung für die Vernetzung ist für mich vollkommen sinnvoll, aber wenn ich sie an anderer Stelle verwende, z. B. in der Bullet Physics-Engine und im .bullet-Format, verstehe ich nicht, wo sie dort verwendet wird.
Aidan Knight
Um meine Verwirrung weiter zu verdeutlichen, habe ich dieses einfache Tutorial codeproject.com/KB/cpp/serialization_primer1.aspx gefunden. In Schritt 3 wird gezeigt, wie Daten in eine Datei serialisiert werden. Ich verstehe nicht, wie sich das vom Schreiben von Text in eine Datei mit fopen / fwrite usw. unterscheidet.
Aidan Knight
Bei der Serialisierung werden Objekte in Ihrer Software in Text umgewandelt, den Sie an fwrite (oder einen anderen von Ihnen benötigten bytestream-orientierten Leser / Schreiber) übergeben können.
3

Etwas zu serialisieren bedeutet im Wesentlichen, es in eine Serie umzuwandeln. Dies ist erforderlich, wenn Sie etwas über ein Netzwerk senden oder in eine Datei schreiben möchten, da beide eine Reihe von Bytes erwarten. Daher ist es im Allgemeinen ein ausgefallener Begriff für die Speicher- und Ladesysteme. Im Fall von Bullet werden die Netzdaten einfach in einer Form gespeichert, die Bullet effektiv verwenden kann. Sie können dies speichern und später laden, ohne Ihre Netze erneut analysieren zu müssen.

Kylotan
quelle
0

Serialize / De-serialize ist einfach das Vorbereiten und Schreiben / Lesen von Objekten auf / von der Festplatte.

WernerCD
quelle
-3

Ich persönlich benutze die Serialisierung zum Networking. Abgesehen davon habe ich nicht wirklich viel Sinn dafür. Wenn Sie wissen möchten, warum es in Bullet verwendet wird, können Sie am besten eine Antwort erhalten, indem Sie in den Bullet-Foren nachfragen oder die Dokumentation lesen.

Unbekanntes Gerät
quelle