Warum muss eine Klasse als serialisierbar markiert werden?

8

Wenn eine ähnliche Frage bereits im Stackoverflow gepostet wird, posten Sie einfach den Link.

Was ist die Notwendigkeit, serialisierbare Schnittstelle (ohne Methoden) für Objekte zu implementieren, die serialisiert werden sollen? Die Java API sagt - - Wenn es nicht implementiert ist, wird es java.io.NotSerializableException auslösen.

Das liegt an folgendem Code in ObjectOutputStream.java

%Vor%

Aber meine Frage ist, warum es notwendig ist, Serializable zu implementieren und dadurch Java / JVM mitzuteilen oder mitzuteilen, dass eine Klasse serialisiert werden kann. (Ist es nur, um die Ausnahme zu vermeiden?).

Ist dies der Fall, wenn wir eine ähnliche Funktionalität schreiben, die Objekte in Streams schreibt, ohne zu prüfen, ob die Klasse in einer instanceOf Serializable ist, werden die Objekte einer Klasse Serializable serialisiert nicht implementieren?

Jede Hilfe wird geschätzt.

    
akjain 18.05.2009, 14:42
quelle

4 Antworten

4

Es ist eine gute Frage. Das Serializable ist als Marker-Interface bekannt und kann als Tag in einer Klasse angezeigt werden, um es als mit Fähigkeiten zu identifizieren Verhaltensweisen. z.B. Sie können damit Klassen angeben, die Sie serialisieren möchten, für die serialVersionUid nicht definiert ist (dies könnte ein Fehler sein).

Beachten Sie, dass für die häufig verwendete Serialisierungsbibliothek XStream (und andere) kein Serializable definiert werden muss.

    
Brian Agnew 18.05.2009 14:50
quelle
2

Es wird benötigt, damit die JVM wissen kann, ob eine Klasse sicher serialisiert werden kann oder nicht. Einige Dinge (z. B. Datenbankverbindungen) enthalten Status oder Verbindungen zu externen Ressourcen, die nicht wirklich serialisiert werden können.

Außerdem sollten Sie sicherstellen, dass Sie ein serialVersionUID-Member in jede serialisierbare Klasse einfügen, um sicherzustellen, dass serialisierte Objekte nach einer Codeänderung oder Neukompilierung deserialisiert werden können:

%Vor%     
Eric Petroelje 18.05.2009 14:50
quelle
2

Die Serialisierung ermöglicht es Ihnen, Objekte direkt in Binärdateien zu speichern, ohne sie in Text zu analysieren, die Zeichenfolge zu schreiben und dann ein neues Objekt zu erstellen und die String-Eingaben beim erneuten Einlesen zu analysieren. Der Hauptzweck ist es, Ihnen zu erlauben um Objekte mit all ihren Daten in einer Binärdatei zu speichern. Ich fand es sehr nützlich, wenn ich mit verknüpften Listen arbeiten musste, die viele Objekte des gleichen Typs enthielten, und ich musste sie speichern und öffnen.

    
FloppyDisk 18.05.2009 19:54
quelle
0

Der Grund ist, dass nicht alle Klassen serialisiert werden können. Beispiele:

  • E / A-Sachen: InputStream, HTTP-Verbindungen, Kanäle. Sie hängen von Objekten ab, die außerhalb des Bereichs der Java-VM erstellt wurden, und es gibt keine einfache Möglichkeit, sie wiederherzustellen.

  • OS-Ressourcen wie Windows, Bilder usw.

Aaron Digulla 18.05.2009 15:00
quelle

Tags und Links