Was genau bedeutet es für eine Klasse, Serializable
in Java zu sein? Oder generell ...
java
serializable
Ritwik Bose
quelle
quelle
Serializable
:Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
Antworten:
Bei der Serialisierung bleibt ein Objekt aus dem Speicher in einer Folge von Bits erhalten, beispielsweise zum Speichern auf der Festplatte. Deserialisierung ist das Gegenteil - Lesen von Daten von der Festplatte, um ein Objekt zu hydratisieren / zu erstellen.
Im Kontext Ihrer Frage handelt es sich um eine Schnittstelle, die bei Implementierung in einer Klasse von verschiedenen Serialisierern automatisch serialisiert und deserialisiert werden kann.
quelle
Obwohl die meisten Benutzer die Antwort bereits gegeben haben, möchte ich ein Beispiel für diejenigen hinzufügen, die sie benötigen, um die Idee zu erklären:
Angenommen, Sie haben eine Klassenperson wie die folgende:
und dann erstellen Sie ein Objekt wie folgt:
Sie können dieses Objekt für viele Streams serialisieren. Ich werde das mit zwei Streams machen:
Serialisierung auf Standardausgabe:
Serialisierung in eine Datei:
Dann:
Deserialisieren aus Datei:
quelle
Dies bedeutet, dass Instanzen der Klasse in einen Byte-Stream umgewandelt werden können (z. B. um in einer Datei gespeichert zu werden) und dann wieder in Klassen konvertiert werden können. Dieses Neuladen kann in einer anderen Instanz des Programms oder sogar auf einem anderen Computer erfolgen. Die Serialisierung (in jeder Sprache) ist jedoch mit allen möglichen Problemen verbunden, insbesondere wenn Sie Verweise auf andere Objekte innerhalb des serialisierbaren Objekts haben.
quelle
Hier ist eine detaillierte Erklärung der Serialisierung : (mein eigener Blog)
Serialisierung:
Bei der Serialisierung wird der Status eines Objekts serialisiert, das in Form einer Folge von Bytes dargestellt und gespeichert wird. Dies kann in einer Datei gespeichert werden. Der Vorgang zum Lesen und Wiederherstellen des Status des Objekts aus der Datei wird als Deserialisierung bezeichnet.
Was ist die Notwendigkeit der Serialisierung?
In der modernen Architektur besteht immer die Notwendigkeit, den Objektstatus zu speichern und dann abzurufen. Zum Beispiel sollten wir im Ruhezustand zum Speichern eines Objekts die Klasse Serializable machen. Sobald der Objektstatus in Form von Bytes gespeichert ist, kann er auf ein anderes System übertragen werden, das dann aus dem Status lesen und die Klasse abrufen kann. Der Objektstatus kann aus einer Datenbank oder einem anderen JVM oder aus einer separaten Komponente stammen. Mit Hilfe der Serialisierung können wir den Objektstatus abrufen.
Codebeispiel und Erklärung:
Schauen wir uns zuerst die Gegenstandsklasse an:
Im obigen Code ist zu sehen, dass die Item- Klasse Serializable implementiert .
Dies ist die Schnittstelle, über die eine Klasse serialisierbar ist.
Jetzt können wir sehen, dass eine Variable namens serialVersionUID mit der Variablen Long initialisiert wird. Diese Zahl wird vom Compiler basierend auf dem Status der Klasse und den Klassenattributen berechnet. Dies ist die Nummer, mit der der JVM den Status eines Objekts identifizieren kann, wenn er den Status des Objekts aus der Datei liest.
Dafür können wir uns die offizielle Oracle-Dokumentation ansehen:
Wenn Sie bemerkt haben, dass wir ein anderes Schlüsselwort verwendet haben, das vorübergehend ist .
Wenn ein Feld nicht serialisierbar ist, muss es als vorübergehend markiert werden. Hier haben wir den itemCostPrice als vorübergehend markiert und möchten nicht, dass er in eine Datei geschrieben wird
Schauen wir uns nun an, wie Sie den Status eines Objekts in die Datei schreiben und von dort aus lesen.
Oben sehen wir ein Beispiel für die Serialisierung und Deserialisierung eines Objekts.
Dafür haben wir zwei Klassen verwendet. Für die Serialisierung des Objekts haben wir ObjectOutputStream verwendet. Wir haben die Methode writeObject verwendet, um das Objekt in die Datei zu schreiben.
Für die Deserialisierung haben wir ObjectInputStream verwendet, der aus dem Objekt aus der Datei liest. Es verwendet readObject, um die Objektdaten aus der Datei zu lesen.
Die Ausgabe des obigen Codes wäre wie folgt:
Beachten Sie, dass itemCostPrice vom deserialisierten Objekt null ist, da es nicht geschrieben wurde.
quelle
Bei der Serialisierung wird der aktuelle Status eines Objekts in einem Stream gespeichert und ein gleichwertiges Objekt aus diesem Stream wiederhergestellt. Der Stream fungiert als Container für das Objekt
quelle
Serializable wird wie eine Schnittstelle aufgerufen, ist jedoch eher ein Flag für den Compiler. Es heißt, dass dieses Objekt gespeichert werden kann. Alle Instanzvariablen von Objects mit Ausnahme von nicht serialisierbaren Objekten und solchen, die als flüchtig markiert sind, werden gespeichert.
Stellen Sie sich vor, Ihre Anwendung kann die Farbe optional ändern, ohne dass diese Einstellung extern bleibt. Sie müssten die Farbe jedes Mal ändern, wenn Sie sie ausführen.
quelle
Die Serialisierung ist eine Technik zum Speichern oder Schreiben der Objekte und Daten in Dateien. Mit
ObjectOutputStream
undFileOutputStream
Klassen. Diese Klassen haben ihre spezifischen Methoden, um die Objekte beizubehalten. mögenwriteObject();
für eine klare Erklärung mit Zahlen. Weitere Informationen finden Sie hier
quelle
Aus einer anderen Perspektive präsentieren. Die Serialisierung ist eine Art Schnittstelle, die als "Marker-Schnittstelle" bezeichnet wird. Eine Markierungsschnittstelle ist eine Schnittstelle, die keine Methodendeklarationen enthält, sondern lediglich eine Klasse bezeichnet (oder „markiert“), die die Schnittstelle mit einer Eigenschaft implementiert. Wenn Sie Polymorphismus verstehen, ist dies sehr sinnvoll. Bei der Serializable-Marker-Schnittstelle schlägt die ObjectOutputStream.write (Object) -Methode fehl, wenn ihr Argument die Schnittstelle nicht implementiert. Dies ist ein möglicher Fehler in Java. Es könnte ObjectOutputStream.write (Serializable) gewesen sein.
Sehr zu empfehlen: Lesen Sie Punkt 37 aus Effective Java von Joshua Bloch , um mehr zu erfahren.
quelle
Serialisierung: Schreiben des Objektstatus in eine Datei / ein Netzwerk oder irgendwo anders. (Mittleres von Java Object unterstütztes Formular zu Dateiunterstütztes Formular oder Netzwerkunterstütztes Formular)
Deserialisierung: Lesen des Objektstatus aus Datei / Netzwerk oder irgendwo anders . (Mittleres von Dateien / Netzwerken unterstütztes Formular zum von Java Object unterstützten Formular)
quelle
Nur um die anderen Antworten und in Bezug auf die Allgemeinheit zu ergänzen. Serialisierung wird manchmal als Archivierung bezeichnet, beispielsweise in Objective-C.
quelle