Was ist Serialisierung?

149

Ich beginne mit der objektorientierten Programmierung (OOP) und möchte wissen: Was bedeutet Serialisierung im OOP-Sprachgebrauch?

Gemeinschaft
quelle
Schauen Sie sich auch diesen Artikel an, in dem erklärt wird, warum Sie Serialization Codeproject.com/KB/dotnet/noserialise.aspx
Nipuna
4
Dieser Artikel ist vollständig BS, daher seine Bewertung.
RedAces
Ist es nicht die Art von zu breiten Fragen, die normalerweise entfernt werden, weil eine Suche bei Google eine sofortige Antwort geben würde?
Arvymetal
2
@arvymetal du hattest recht. Dies war das erste Ergebnis, als ich gegoogelt habe :) Und es war genau das, wonach ich gesucht habe
R_G

Antworten:

143

Bei der Serialisierung wird ein Objekt im Speicher in einen Bytestrom umgewandelt, sodass Sie es beispielsweise auf der Festplatte speichern oder über das Netzwerk senden können.

Deserialisierung ist der umgekehrte Prozess: Ein Bytestrom wird in ein Objekt im Speicher umgewandelt.

Andrew Barnett
quelle
46
Auch die Verben Marshalund Unmarshalsind synonym mit Serializeund Deserialize.
Wulfgarpro
4
Wird ein Objekt im Speicher nicht bereits auf der untersten Ebene als Byte dargestellt?
Mahacoder
3
Ein Objekt im Speicher wird vom Compiler, Betriebssystem und / oder der Hardware formatiert. Ändern Sie Ihren Compiler und Sie ändern Ihr Format. Ein serialisiertes Objekt hat ein durch Ihren Code definiertes Format, sodass Sie das Format garantieren können. Dies ist auch hilfreich, wenn Objekte über ein Netzwerk gesendet werden. Der empfangende Computer verfügt möglicherweise über eine völlig andere Architektur (und damit über eine speicherinterne Darstellung).
Andrew Barnett
1
Also verwandelt es sich in eine Schnur?
NoName
1
Eine Zeichenfolge kann ein gültiges Format sein, muss jedoch keine Zeichenfolge sein. Zeichenfolgen selbst haben unterschiedliche Formate (ASCII, UTF8, UTF16, EBCDIC ...) und demonstrieren das Konzept tatsächlich ziemlich gut. Die Zeichenfolge (ein In-Memory-Objekt) wird abcals 0x61 0x62 0x63(ASCII) oder 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) serialisiert - mit oder ohne NUL-Terminatoren oder codierten Längen.
Andrew Barnett
91

Einfach ausgedrückt ist Serialisierung ein Prozess zum Konvertieren eines Objekts in einen Bytestrom, sodass es über ein Netzwerk übertragen oder in einem dauerhaften Speicher gespeichert werden kann.

Die Deserialisierung ist genau das Gegenteil: Rufen Sie einen Bytestrom aus dem Netzwerk- oder Persistenzspeicher ab und konvertieren Sie ihn mit demselben Status zurück in das Objekt .

Es ist zu verstehen, wie diese Byteströme interpretiert oder manipuliert werden, damit wir genau das gleiche Objekt / den gleichen Zustand erhalten. Es gibt verschiedene Möglichkeiten, dies zu erreichen. Einige von ihnen sind -

  1. XML : Konvertieren Sie ein Objekt in XML, übertragen Sie es über ein Netzwerk oder speichern Sie es in einer Datei / Datenbank. Rufen Sie es ab und konvertieren Sie es zurück in das Objekt mit demselben Status. In Java verwenden wir die JAXB- Bibliothek (Java Architecture for XML Binding) (ab Java 6 wird sie mit JDK geliefert).
  2. JSON : Dasselbe kann durch Konvertieren des Objekts in JSON (JavaScript-Objektnotation) erfolgen. Auch hier gibt es eine GSON-Bibliothek, die dafür verwendet werden kann.
  3. Oder wir können die Serialisierung verwenden, die von der OOP-Sprache selbst bereitgestellt wird. In Java können Sie beispielsweise ein Objekt serialisieren, indem Sie es implementieren Serializable interfaceund in Object Stream schreiben.
Aniket Thakur
quelle
@ AniketThakur Eine sehr gute Erklärung, können Sie mir auch einen Link geben, über den ich JSONvon Grund auf etwas lernen kann , da ich nichts darüber weiß
Kasun Siyambalapitiya
Wenn wir über Serialisierung sprechen, beziehen wir uns immer nur auf Objekt. Wir können keine Serialisierung in der funktionalen Sprache verwenden, bei der wir kein Objekt haben, anstatt Dateien für die Übertragung über das Netzwerk zu verwenden.
Pardeep Sharma
1
Warum müssen wir zunächst ein Objekt in einen Bytestrom und zurück konvertieren? Warum ist das keine implizite Operation für einen Benutzer, der dies versucht?
Aparna Chaganti
1
Wenn wir JSON oder XML verwenden können, warum brauchen oder sagen wir dann, dass wir sie in Stream-Bytes konvertieren? Und dann speichern wir sie nur in JSOn oder XML, anstatt sie in Bytes zu konvertieren.
Muhammad Faizan Fareed
78

Einfache Erklärung über Bild:

Rex, mein Hund, ist serialisiert!

Erklärung durch Analogie:

Angenommen, ich spreche mit meinem Kumpel am Telefon und erzähle ihm von meinem neuen Welpen.

Hier ist mein Problem: Der Welpe ist ein lebendes, atmendes Säugetier. Wie soll ich einen Welpen über die Telefonleitung befördern? Ich kann meinen Welpen nicht physisch in meinen Telefonhörer stecken.

Also muss ich stattdessen eine Darstellung des Welpen am Telefon übermitteln. Mit anderen Worten, ich serialisiere dann meinen Hund Rex und sende ihm die serialisierte Version von Rex über die Telefonleitung:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

Es ist eine perfekte Darstellung - eine Serialisierung meines Hundes.

Zusammenfassung:

Serialisierung bedeutet im Grunde, meinen Hund Rex in etwas anderes zu verwandeln - ein JSON-Objekt - das dann als eine Reihe von Einsen und Nullen über die Telefonleitung transportiert werden kann. Mein Kumpel in NYC kann diese Einsen und Nullen dann wieder in ein JSON-Objekt übersetzen - so dass er eine perfekte Darstellung meines Hundes Rex hat.

BKSpurgeon
quelle
16

Schauen Sie sich das an, dies gibt Ihnen eine gute Erklärung:

http://en.wikipedia.org/wiki/Serialization

Ich denke, die häufigste Verwendung des Begriffs Serialisierung hat mit der Konvertierung eines binären Objekts in eine XML-Darstellung (oder eine andere Zeichenfolge) zu tun, damit es in einer Datenbank / Datei gespeichert oder in einem Webdienstaufruf über ein Netzwerk gesendet werden kann. Die Deserialisierung ist der umgekehrte Prozess - das Zurückkonvertieren eines XML / Strings in ein Objekt.

EDIT: Ein anderer Begriff, auf den Sie möglicherweise stoßen, ist Marshalling / Unmarshalling. Marshalling ist im Grunde das gleiche Konzept wie Serialisierung, und Unmarshalling ist dasselbe wie Deserialisierung.

Andy White
quelle
3
Nicht unbedingt nur XML, es kann jede Darstellung sein, sogar eine binäre Darstellung
Matthew Farwell
7

Bei der Serialisierung wird ein Objekt in einen Bytestrom konvertiert, um das Objekt zu speichern oder in den Speicher, eine Datenbank oder eine Datei zu übertragen. Der Hauptzweck besteht darin, den Status eines Objekts zu speichern, um es bei Bedarf neu erstellen zu können. Der umgekehrte Prozess wird Deserialisierung genannt.

...

Diese Abbildung zeigt den gesamten Serialisierungsprozess

Gesamtprozess der Serialisierung

...

Durch die Serialisierung kann ein Entwickler Aktionen ausführen, z. B. das Senden des Objekts an eine Remoteanwendung mithilfe eines Webdienstes, das Übergeben eines Objekts von einer Domäne an eine andere, das Übergeben eines Objekts durch eine Firewall als XML-Zeichenfolge oder das Aufrechterhalten der Sicherheit oder benutzerspezifisch Informationen über Anwendungen hinweg

Von https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(Hervorhebung von mir)

Chamin Wickramarathna
quelle
5

Bei der Serialisierung werden ungeordnete Daten (z. B. ein Objekt) in eine Reihe von Token konvertiert , die später zur Rekonstruktion der Originaldaten verwendet werden können. Das serialisierte Formular ist meistens eine Textzeichenfolge, muss es aber nicht sein.

Dave Sherohman
quelle
2

Die Serialisierung konvertiert ein Objekt in eine speicherbare Bitfolge.

Sie können diese Sequenz also in einer Datei, einer Datenbank oder über das Netzwerk senden.

Später können Sie es auf das eigentliche Objekt deserialisieren und es jederzeit wiederverwenden.

Web Services und AJAX sind das häufigste Beispiel für Serialisierung. Die Objekte werden serialisiert, bevor die Antwort an den Client gesendet wird.

Canavar
quelle
1

Die Serialisierung ist nichts anderes als das Übertragen des von Java unterstützten Objekts in ein von Dateien unterstütztes Formular

                         (OR)

Konvertieren von Java-unterstütztem Formular in netzwerkgestütztes Formular. Der Hauptbereich der Serialisierung besteht darin, die Daten von einer Schicht auf eine andere Schicht zu übertragen. Nur serialisierte Objekte können über das Netzwerk gesendet werden.

sriiii
quelle
1

Bei der Serialisierung wird ein von Java, C # oder einem anderen (OOP-Sprachen) unterstützten Objekt in ein transportables Formular konvertiert. Auf diese Weise kann es über das Netzwerk transportiert oder auf einer Festplatte gespeichert werden. Damit eine Klasse serialisierbar ist, muss sie eine serialisierbare Schnittstelle implementieren.

Nesan Mano
quelle
nicht nur auf Java oder C # beschränkt, in den meisten Programmiersprachen verwenden wir Serialisierung. ZB wird in Python Pickle Modul für das gleiche verwendet.
Pardeep Sharma
0

Durch die Serialisierung werden Daten in eine lineare "Zeichenfolge" von Bytes umgewandelt.

Andere haben mehr oder weniger dasselbe gesagt, aber ich betone, dass Computermodelle erfordern, dass Daten in den eindimensional adressierten RAM oder den persistenten Speicher passen.

Die meisten Dinge, die "Daten" sind, sind von Natur aus serialisierbar (selbst wenn Sie das abstrakte Modell auf ein lineares reduzieren müssen). Nicht serialisierbar sind beispielsweise eine Netzwerkverbindung oder eine komplizierte zustandsbasierte Maschine wie ein Parser.

Überflogen
quelle
0

Die Serialisierung hat mit der Konvertierung eines Binärobjekts in eine XML-Darstellung (oder eine andere Zeichenfolge) zu tun, damit es in einer Datenbank / Datei gespeichert oder in einem Webdienstaufruf über ein Netzwerk gesendet werden kann. Die Deserialisierung ist der umgekehrte Prozess - das Zurückkonvertieren eines XML / Strings in ein Objekt.

Viswanathan
quelle
0

Wenn das eigentliche Objekt (das Ding) aus einer Klasse (Blaupause) instanziiert (konstruiert) wird, muss das Objekt (Ding) durch Serialisierung (Zerlegung in seine atomare Grundstruktur) in einem Speicherbereich gespeichert werden. (Ein bisschen wie Star Treks Transporter). Sie zerlegen das Ding in einen Informationsstrom, der irgendwohin transportiert und gespeichert werden kann. Wenn Sie dann das Objekt rekonstruieren möchten, ziehen Sie einfach die atomar gespeicherte Instanz zurück in das Objekt. Anders als Instaniation.

David K ​​Hill
quelle
0

Bei der Serialisierung wird ein Objekt in einen binären Datenstrom konvertiert, sodass es in einer Datei gespeichert oder über ein Netzwerk gesendet werden kann, wo es wieder auf dasselbe Objekt zurückgesetzt werden kann.

Dieses Dokument soll Ihnen helfen, die Java-Serialisierung im Detail zu verstehen.

Nikhil Katre
quelle
-1

Serialisierung ist, wenn ein Objekt (ein Teil des Speichers) in eine Form übersetzt wird, in der der Objektstatus in einer Datei gespeichert werden kann (als Beispiel).

Behandeln Sie es einfach als Kekse - Objekt ist ein Teig, Keks - ist ein serialisierter Teig.

Durch "Serialisieren" können Sie also Cookies an Ihren Freund senden.

Sowas in der Art :-)

Mr.ElectroNick
quelle
4
... außer dass Kekse nicht wieder in Teig umgewandelt werden können (deserialisiert).
Dave Sherohman