Was ist die Notwendigkeit der Serialisierung von Objekten in Java? [closed]

Lesezeit: 9 Minuten

Benutzeravatar von JavaUser
JavaUser

Kann mir jemand sagen, was die Notwendigkeit der Serialisierung von Objekten in Java ist, und mir ein Beispielszenario geben, um die Notwendigkeit zu erklären? (Ich verstehe bereits, was Serialisierung ist, ich möchte nur verstehen, wann Sie es verwenden und wie Sie es verwenden würden?).

  • Bei der Serialisierung geht es nicht darum, ein Objekt in Bits und Bytes umzuwandeln, Objekte SIND bereits Bits und Bytes. Serialisierung ist der Prozess, den „Zustand“ des Objekts dauerhaft zu machen. Lesen Sie dies: stackoverflow.com/a/69416269/9868445

    – aderchox

    2. Oktober 2021 um 11:02 Uhr


Benutzeravatar von Amit Kumar Gupta
Amit Kumar Gupta

Kurzgeschichte über Serialisierung

Nach vielen Jahren harter Arbeit haben Wissenschaftler der Erde einen Roboter entwickelt, der ihnen bei der täglichen Arbeit helfen kann. Aber dieser Roboter hatte weniger Funktionen als die Roboter, die von den Wissenschaftlern vom Planeten Mars entwickelt wurden.

Nach einem Treffen zwischen den Wissenschaftlern beider Planeten wird entschieden, dass der Mars seine Roboter zur Erde schicken wird. Aber ein Problem ist aufgetreten. 100 Roboter zur Erde zu schicken kostete 100 Millionen Dollar. Und es dauert ungefähr 60 Reisetage.

Schließlich beschlossen die Mars-Wissenschaftler, ihr Geheimnis mit den Wissenschaftlern der Erde zu teilen. Bei diesem Geheimnis ging es um die Struktur von Klasse/Roboter. Die Wissenschaftler der Erde haben die gleiche Struktur auf der Erde selbst entwickelt. Wissenschaftler des Mars serialisiert die Daten jedes Roboters und schickte sie zur Erde. Wissenschaftler der Erde deserialisiert die Daten und fütterten sie entsprechend in jeden Roboter.

Dieser Prozess sparte ihnen Zeit bei der Übermittlung einer riesigen Datenmenge.

Einige der Roboter wurden bei Verteidigungsarbeiten auf dem Mars eingesetzt. Daher markierten ihre Wissenschaftler einige entscheidende Eigenschaften dieser Roboter als vorübergehend bevor sie ihre Daten zur Erde senden. Beachten Sie, dass die transiente Eigenschaft auf null (im Falle einer Referenz) oder auf den Standardwert (im Falle des primitiven Typs) gesetzt wird, wenn das Objekt deserialisiert wird.

Ein weiterer Punkt, der den Wissenschaftlern der Erde aufgefallen ist, ist, dass die Mars-Wissenschaftler sie gebeten haben, welche zu erschaffen statische Variablen um Details über die Umgebung zu behalten. Diese Details werden von einigen Robotern verwendet. Aber die Mars-Wissenschaftler teilen diese Details nicht. Weil sich die Umgebung der Erde von der Umgebung des Mars unterschied.

Obwohl sie die Struktur der Roboterklasse kannten und über serialisierte Daten verfügten, waren die Wissenschaftler der Erde nicht in der Lage, die Daten zu deserialisieren, die Roboter zum Arbeiten bringen können.

Exception in thread "main" java.io.InvalidClassException:
SerializeMe; local class incompatible: stream classdesc
:

Die Mars-Wissenschaftler warteten auf die vollständige Zahlung. Sobald die Zahlung erfolgt war, teilten die Wissenschaftler des Mars die UID der Seriennummer mit den Wissenschaftlern der Erde. Der Erdwissenschaftler stellte es auf Roboterklasse und alles begann zu arbeiten.

Aktualisieren

Obwohl sie mit Hilfe der Serialisierung in der Lage waren, Daten mithilfe von Signalen anstelle eines tatsächlichen Raumschiffs zu senden, stellten sie fest, dass das Senden großer Datensätze immer noch eine Herausforderung war. Die Serialisierung machte den Prozess billiger und schneller, aber er war immer noch langsam. Daher kamen die verschiedenen Wissenschaftler auf unterschiedliche Ideen, um die Datengröße zu reduzieren. Einige Wissenschaftler schlugen vor, die Daten zu komprimieren, und einige schlugen vor, andere Mechanismen zu verwenden, um sie darzustellen, damit sie wieder deserialisiert werden können. Einige der Ideen sind XML, JSON, Nachrichtenpaket, निम्न (Nimn)

  • Ich habe deine Geschichte fortgesetzt [here] (stackoverflow.com/questions/447898/what-is-object-serialization/… )

    – keine Abfrage

    18. Juni 2011 um 15:51 Uhr


  • danke @noquery, ich habe einen Teil des Teils übersprungen, der sich auf die Serialisierung bezieht. Ich werde versuchen, den Restteil auch abzudecken.

    – Amit Kumar Gupta

    18. Juni 2011 um 16:40 Uhr

  • Liebte die Geschichte. Ich hoffe, jeder kann es mit solchen Geschichten erklären. Wie kann ich mehrmals upvoten?

    – Khatri

    1. August 2016 um 16:40 Uhr

  • Danke. Ich liebe es, Dinge auf natürliche Weise zu erklären, wo immer ich kann.

    – Amit Kumar Gupta

    1. August 2016 um 19:02 Uhr

  • Eine recht interessante Art der Erklärung. Diese Geschichte erinnert mich irgendwie an die TV-Serie „The Expanse“.

    – mss

    21. Februar 2020 um 6:03 Uhr


Benutzeravatar von Vaishak Suresh
Vaishak Suresh

Die Serialisierung wird normalerweise verwendet, wenn die Notwendigkeit besteht, Ihre Daten über das Netzwerk zu senden oder in Dateien zu speichern. Mit Daten meine ich Objekte und nicht Text.

Das Problem ist nun, dass Ihre Netzwerkinfrastruktur und Ihre Festplatte Hardwarekomponenten sind, die Bits und Bytes verstehen, aber keine JAVA-Objekte.

Serialisierung ist die Übersetzung der Werte/Zustände Ihres Java-Objekts in Bytes, um es über das Netzwerk zu senden oder zu speichern.

Dies entspricht der Übertragung Ihrer Stimme über PSTN-Telefonleitungen.

  • das analoge telefonieren zum übertragen von voice-over-wire teil ist wirklich gut. Danke

    – fuyi

    18. Juni um 12:25 Uhr

Benutzeravatar von Michael Aaron Safyan
Michael Aaron Safjan

Java-Serialisierung (und insbesondere die Serialisierbar und Externalisierbar Interfaces) ermöglicht es Ihnen, beliebig komplizierte Java-Objekte automatisch oder manuell von/auf die Festplatte oder vom/zum Netzwerk zu lesen/schreiben. Während XML und JSON Textformate sind, ist die Java-Serialisierung ein Binärformat. (Serialisierung ist auch ein allgemeines Konzept zum einfachen Lesen/Schreiben von Daten, aber da es sich bei der Frage um Java handelt, nehme ich an, dass Sie sich auf das integrierte Serialisierungssystem beziehen, dh Serializable/Exernalisierbar)

Vorteile von „implementiert Serializable“ gegenüber XML/JSON

Zunächst erhalten Sie die Serialisierung ziemlich kostenlos. Sie müssen nicht viele Änderungen an Ihren Objekten vornehmen, damit der Serialisierungsmechanismus damit funktioniert. Ein weiterer Vorteil ist, dass es, da es sich um ein Binärformat handelt, viel kompakter ist als das Textformat und daher wahrscheinlich weniger Speicherplatz benötigt (was gut ist, um Netzwerkbandbreite oder Speicherplatz auf der Festplatte zu sparen).

Nachteile „implementiert Serializable“ gegenüber XML/JSON

Der Nachteil der eingebauten Java-Serialisierung besteht darin, dass, wenn Sie Änderungen an Ihrem Objekt vornehmen, die Kompatibilität der verschiedenen Serialisierungsformate wirklich ein großer Albtraum sein kann. Auch wenn Sie XML und JSON manuell bearbeiten können, können Sie ein serialisiertes Java-Objekt nicht bearbeiten (ohne es in Java einzulesen). Aus den gleichen Gründen ist es oft einfacher, XML und JSON zu debuggen als Binärformate, da XML und JSON für Menschen lesbar sind. Ein weiterer Nachteil des eingebauten Serialisierungsmechanismus von Java besteht darin, dass Sie die Daten aus einer anderen Programmiersprache nicht (einfach) serialisieren/deserialisieren können.

Alternative Techniken zum Lesen/Schreiben von Daten

Es gibt alternative Serialisierungstechniken neben der integrierten Serialisierung von Java, die Ihnen das Beste aus beiden Welten bieten: kompakte Binärformate, Sprachinteroperation, einfache Versionskompatibilität und häufig auch Debugging-Tools, die es einfach machen, die Binärdaten in lesbarem Format auszugeben. Zum Beispiel Open Source von Google Protokollpuffer und MessagePack sind Beispiele für Serialisierungsbibliotheken/-formate, mit denen Sie kompakte Binärdaten lesen/schreiben und die Versionskompatibilität problemlos aufrechterhalten können. Der größte Nachteil dieser Bibliotheken gegenüber der integrierten Java-Serialisierung besteht darin, dass sie einfache alte Datenobjekte für die Serialisierung verwenden (im Gegensatz zu Java-Objekten mit mehr Funktionen, denen auch ein Verhalten zugeordnet ist); Dieser Nachteil ist jedoch tatsächlich ein Vorteil, da die Trennung des Datenmodells, in dem/von dem die Informationen gespeichert werden, von den Objekten, die umschließen oder von ihnen abgeleitet werden, eigentlich eine gute Programmierpraxis ist und die Unterstützung mehrerer Formate erleichtert.

Verwendung

Da Sie nach der Notwendigkeit gefragt haben, nicht nur nach der Definition, gibt es eine Reihe von Anwendungsfällen:

  1. Speichern Sie einfach Ihre Daten für eine spätere Verwendung. Nehmen wir zum Beispiel an, Sie schreiben ein Videospiel. Ihr Programm wird nicht ewig laufen; selbst wenn es nie abstürzt (was hoffentlich der Fall ist), wird Ihr Benutzer das Programm wahrscheinlich irgendwann beenden oder das Betriebssystem kann das Programm beenden, um Ressourcen zu sparen (z. B. bei Android sind Hintergrundprozesse, mit denen der Benutzer nicht interagiert, häufig und vom Betriebssystem absichtlich beendet, um Systemressourcen wie RAM zurückzugewinnen). Um sicherzustellen, dass der Benutzer nicht ganz von vorne beginnt und stattdessen dort weitermachen kann, wo er war oder am letzten Speicherpunkt, sollten Sie den Status des Spiels in einen dauerhaften Speicher schreiben (dh die Festplatte, das Google Drive-Konto des Benutzers usw.). Dazu müssen Sie die Datenstrukturen im Speicher, die den Status des Spiels darstellen, in Rohbytes übersetzen, die Sie auf die Festplatte schreiben können (oder auf welches System Sie die Daten auch immer speichern).

  2. Abrufen von Informationen von einem Remote-Server. Fahren wir mit dem Spielbeispiel fort … Angenommen, Sie erstellen ein Online-Multiplayer-Spiel oder möchten es ermöglichen, neue Level oder Elemente im Spiel bereitzustellen, ohne dass der Benutzer seine App aktualisieren muss. Dazu möchten Sie, dass die Informationen über den Online-Player oder die Informationen über die neuen Levels/Gegenstände von einem Servercomputer (den Sie als Kontaktpunkt für alle auf verschiedenen Geräten installierten Kopien der App verwenden) übermittelt werden. zu den einzelnen Exemplaren der App. Sowohl der Server als auch die App benötigen eine Art In-Memory-Darstellung dieser Datenstrukturen (z. B. die Position anderer Spieler, die Struktur eines neuen Levels, die Beschreibung/das Bild für einen neuen Gegenstand usw.), aber um die Informationen zu übertragen Vom Server bis zur App auf dem Gerät besteht das Kommunikationssystem aus Rohbytes, und daher ist es notwendig, eine Möglichkeit zu haben, die Daten in Rohbytes und von den Rohbytes zurück in eine aussagekräftige In-Memory-Datenstruktur umzuwandeln.

So ziemlich jede Kommunikation zwischen zwei verschiedenen Prozessen/Apps oder zwischen einer App und einem Speichersystem ist ein Fall, in dem eine Art Serialisierungsmechanismus erforderlich ist.

Thilos Benutzeravatar
Thilo

Wenn Sie den Zustand eines Objekts in einer Datei speichern oder über das Netzwerk senden möchten, müssen Sie ihn in eine Reihe von Bytes umwandeln. Dies wird als Serialisierung bezeichnet.

Java hat dafür einen eingebauten Mechanismus, andere Optionen sind XML oder JSON.

Beispiele, wenn Sie dies benötigen: Zwischenspeichern von Objekten, Remote-Methodenaufrufe, Speichern eines Objektdiagramms auf der Festplatte.

  • Wenn Sie ein Objekt (-Struktur) auf der Festplatte speichern möchten, benötigen Sie eine Serialisierung.
  • Ein Webdienst erfordert die Serialisierung von Objekten in XML, bevor sie übertragen werden können.

Benutzeravatar von Gagandeep Singh
Gagandeep Singh

Und Sie können das Klonen von Objekten auch mithilfe der Serialisierung implementieren

Benutzeravatar von user095736
Benutzer095736

Serialisierung wird im Allgemeinen als Umwandlung eines Objekts in eine Reihe von Bits bezeichnet. Es ist ein wesentlicher Bestandteil von Java, da Java hauptsächlich für webbasierte Anwendungen gedacht ist. Ich möchte die Daten über das Netzwerk verfügbar machen

1436790cookie-checkWas ist die Notwendigkeit der Serialisierung von Objekten in Java? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy