GeeksforGeeks (Deutsch)

Serialisierung ist ein Mechanismus zum Konvertieren des Status eines Objekts in einen Byte-Stream. Deserialisierung ist der umgekehrte Prozess, bei dem der Byte-Stream verwendet wird, um das eigentliche Java-Objekt im Speicher neu zu erstellen. Dieser Mechanismus wird verwendet, um das Objekt beizubehalten.

Der erzeugte Bytestrom ist plattformunabhängig. Das auf einer Plattform serialisierte Objekt kann also auf einer anderen Plattform deserialisiert werden.,

Um ein Java-Objekt serialisierbar zu machen, implementieren wir die java.io.Serializable Schnittstelle.
Die ObjectOutputStream Klasse enthält writeObject () Methode zum Serialisieren eines Objekts.

public final void writeObject(Object obj) throws IOException

Die ObjectInputStream-Klasse enthält die readObject () – Methode zum Deserialisieren eines Objekts.

public final Object readObject() throws IOException, ClassNotFoundException

Vorteile der Serialisierung
1. So speichern / persistieren Sie den Status eines Objekts.
2. Um ein Objekt über ein Netzwerk zu reisen.

Es können nur die Objekte dieser Klassen serialisiert werden, die die java.io.Serializable-Schnittstelle implementieren.,
Serializable ist eine Marker-Schnittstelle (hat kein Datenelement und Methode). Es wird verwendet, um Java-Klassen zu „markieren“, damit Objekte dieser Klassen bestimmte Fähigkeiten erhalten. Weitere Beispiele für Marker-Schnittstellen sind: – Cloneable und Remote.

Punkte zu erinnern
1. Wenn eine übergeordnete Klasse eine serialisierbare Schnittstelle implementiert hat, muss die untergeordnete Klasse sie nicht implementieren, aber umgekehrt ist dies nicht der Fall.
2. Über den Serialisierungsprozess werden nur nicht statische Datenelemente gespeichert.
3. Statische Datenelemente und transiente Datenelemente werden nicht über den Serialisierungsprozess gespeichert.,Wenn Sie also keinen Wert eines nicht statischen Datenelements speichern möchten, machen Sie es vorübergehend.
4. Konstruktor des Objekts wird nie aufgerufen, wenn ein Objekt deserialisiert wird.
5. Zugeordnete Objekte müssen eine serialisierbare Schnittstelle implementieren.
Beispiel:

class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }

serialVersionUID
Die Serialisierungslaufzeit ordnet jeder serialisierbaren Klasse, die serialVersionUID genannt wird, eine Versionsnummer zu, die während der Deserialisierung verwendet wird, um zu überprüfen, ob Sender und Empfänger eines serialisierten Objekts Klassen für dieses Objekt geladen haben, die in Bezug auf die Serialisierung kompatibel sind., Wenn der Empfänger eine Klasse für das Objekt geladen hat, die eine andere UID als die der entsprechenden Absenderklasse hat, führt die Deserialisierung zu einer InvalidClassException. Eine serialisierbare Klasse kann ihre eigene UID explizit deklarieren, indem sie einen Feldnamen deklariert.
Es muss statisch, endgültig und vom Typ lang sein.
ich.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;

Wenn eine serialisierbare Klasse eine serialVersionUID nicht explizit deklariert, berechnet die Serialisierungslaufzeit eine Standardklasse für diese Klasse basierend auf verschiedenen Aspekten der Klasse, wie in Java Object Serialization Specification beschrieben. Es wird jedoch dringend empfohlen, dass alle serialisierbaren Klassen den serialVersionUID-Wert explizit deklarieren, da seine Berechnung sehr empfindlich auf Klassendetails reagiert, die je nach Compiler-Implementierungen variieren können, jede Änderung der Klasse oder die Verwendung einer anderen ID die serialisierten Daten beeinflussen kann.,

Es wird auch empfohlen, einen privaten Modifikator für die UID zu verwenden, da er als vererbtes Mitglied nicht nützlich ist.

serialver
Der serialver ist ein Werkzeug, das mit JDK kommt. Es wird verwendet, um die serialVersionUID-Nummer für Java-Klassen abzurufen.,
Sie können den folgenden Befehl ausführen, um serialVersionUID

serialver

Beispiel 1:



Ausgabe :

Object has been serializedObject has been deserialized a = 1b = geeksforgeeks

Beispiel 2:



Ausgabe:

Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000

Beschreibung für die Ausgabe:
Sie haben beim Deserialisieren des Objekts gesehen, dass sich die Werte von a und b geändert haben. Der Grund, a zu sein, wurde als vorübergehend markiert und b war statisch.,
Im Falle von transienten Variablen: – Eine Variable mit transient Schlüsselwort definiert wird während der Serialisierung Prozess nicht serialisiert.Diese Variable wird während der Deserialisierung mit dem Standardwert initialisiert. (zB: Für Objekte ist es null, für int ist es 0).
Im Falle von statischen Variablen: – Eine Variable mit statischen Schlüsselwort definiert wird während der Serialisierung Prozess nicht serialisiert.Diese Variable wird mit dem aktuellen Wert geladen, der während der Deserialisierung in der Klasse definiert wurde.

Dieser Artikel wird von Mehak Narang und Shubham Juneja beigesteuert., Wenn Sie GeeksforGeeks mögen und einen Beitrag leisten möchten, können Sie auch einen Artikel mit schreiben contribute.geeksforgeeks.org oder mailen Sie Ihren Artikel an [email protected]. Sehen Sie Ihren Artikel auf der Hauptseite von GeeksforGeeks und helfen Sie anderen Geeks.
Bitte schreiben Sie Kommentare, wenn Sie finden etwas falsch, oder Sie teilen möchten mehr Informationen über das Thema diskutiert oben.

Achtung Leser! Hör jetzt nicht auf zu lernen., Holen Sie sich alle wichtigen Java Foundation und Collections Konzepte mit den Grundlagen von Java und Java Collections Kurs zu einem studentenfreundlichen Preis und werden Industrie bereit.

Artikel-Tags :

Java
Praxis-Tags :

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.