Zusätzlich zu dem, was die anderen Antworten gesagt haben:
Manchmal möchten Sie Dinge serialisieren, die keine reinen Daten sind.
Denken Sie beispielsweise an ein Datei-Handle oder eine Verbindung zu einem Server. Obwohl das Dateihandle oder der Socket ein ist int
, ist diese Nummer beim nächsten Ausführen des Programms bedeutungslos. Um Objekte, die Handles für solche Dinge enthalten, ordnungsgemäß neu zu erstellen, müssen Sie Dateien erneut öffnen und Verbindungen neu erstellen und entscheiden, was zu tun ist, wenn dies fehlschlägt.
Heutzutage unterstützen viele Sprachen das Speichern anonymer Funktionen in Objekten, beispielsweise ein onBlah()
Handler in Javascript. Dies ist eine Herausforderung, da dieser Code Verweise auf zusätzliche Datenelemente enthalten kann, die wiederum serialisiert werden müssen. (Und dann gibt es das Problem der plattformübergreifenden Serialisierung von Code, das für interpretierte Sprachen offensichtlich einfacher ist.) Auch wenn nur eine Teilmenge der Sprache unterstützt werden kann, kann es sich dennoch als recht nützlich erweisen. Nicht viele Serialisierungsmechanismen versuchen, Code zu serialisieren, sehen aber serialize-javascript .
In Fällen, in denen Sie ein Objekt serialisieren möchten, das jedoch etwas enthält, das von Ihrem Serialisierungsmechanismus nicht unterstützt wird, müssen Sie den Code so umschreiben, dass dies umgeht. Beispielsweise können Sie anstelle anonymer Funktionen Aufzählungen verwenden, wenn eine begrenzte Anzahl von Funktionen möglich ist.
Oft möchten Sie, dass die serialisierten Daten kurz sind.
Wenn Sie Daten über das Netzwerk senden oder sogar auf einer Festplatte speichern, kann es wichtig sein, die Größe klein zu halten. Eine der einfachsten Möglichkeiten, dies zu erreichen, besteht darin, Informationen zu verwerfen, die wiederhergestellt werden können (z. B. das Löschen von Caches, Hash-Tabellen und alternativen Darstellungen derselben Daten).
Natürlich muss der Programmierer manuell auswählen, was gespeichert und was verworfen werden soll, und sicherstellen, dass die Dinge neu erstellt werden, wenn das Objekt neu erstellt wird.
Denken Sie über das Speichern eines Spiels nach. Objekte können viele Zeiger auf Grafikdaten, Sounddaten und andere Objekte enthalten. Das meiste davon kann jedoch aus den Spieledatendateien geladen werden und muss nicht in einer Sicherungsdatei gespeichert werden. Es kann mühsam sein, es zu verwerfen, so dass oftmals kleine Dinge übrig bleiben. Ich habe einige Sicherungsdateien in meiner Zeit verhext und Daten entdeckt, die eindeutig redundant waren, wie z. B. textuelle Artikelbeschreibungen.
Manchmal ist der Speicherplatz nicht wichtig, aber die Lesbarkeit. In diesem Fall können Sie stattdessen ein ASCII-Format (möglicherweise JSON oder XML) verwenden.