Hierbei wird der doppelte Zugriff auf ein Objekt ebenso berücksichtigt wie der Fall, dass zyklische Abhängigkeiten auftreten. Jedem Objekt wird ein Handle zugewiesen, so dass es nur einmal im Datenstrom kodiert wird. Solche Mechanismen werden beispielsweise benötigt, um über ein Netzwerk aufzurufen oder Objekte in einer Datenbank zu speichern. Erinnern Sie sich: Referenzvariablen speichern keine Zahlen oder ähnliches. Die Referenz wird einfach auf ein Java-Objekt gespeichert.
Generates an object input stream that will read from the specified input stream.
ObjektOutputStream und ObjektInputStream ermöglichen das Speichern und Lesen von Objekten. Falls ein bestimmtes Archivierungsobjekt vom Type serialisierbar ist, wird es als permanent abspeicherbar, d.h. beständig betrachtet. Sichern eines Objekts ist wie das Festhalten des Zustandes, um das betreffende Element zu einem beliebigen späten Zeitpunkt wieder in diesen Status zu bringen. Das Sichern eines Objekts, das nicht vom Type Seriellisierbar ist, beendet sich zur Laufzeit über eine NichtSerialisierbare Ausnahme, eine Subklasse von ObjektStreamException.
Setzen berücksichtigt nicht den Zustand der bereits in den Fluss geschriebenen Objekte. Wenn Sie eine Serie von gleichartigen Gegenständen abschreiben wollen, ist die Vorgehensweise sehr simpel und entspricht der bereits beschriebenen Vorgehensweise. Im folgenden Beispiel werden Terminobjekte für Jänner 2001 angelegt und in einer Datenbank gespeichert.
Es wird der Versuch mit den in Java 7 eingeführten Ressourcen ausprobiert.
Objekte zu lesen kann zu einem komplexen Prozess werden.
Die oben genannten Fälle werden wir fortsetzen und die zugehörigen Objekte wieder „auftauen“. Objekte zu liest ist wie einen Konstruktor aufzurufen. Objekte werden parametrisiert, Art und Status werden dem seriellen Formular übernommen. Um unsere Objekte zu importieren, gehen wir davon aus, dass der Datentyp bekannt ist (Datum), aber die Zahl der Datenzeilen nicht bekannt ist.
Der Rückgabewert der verantwortlichen Methode readObject() entspricht nicht der erwarteten Null am Ende der Datei (siehe die entsprechende Option readLine() im BufferedReader), sondern löst eine EOF-Exception aus.
Das ist es schließlich, wofür wir ein weiteres Try-Catch-Konstrukt einbauen müssen, da die close()-Methode eine IO-Exception erzeugt, eine typischerweise auch beim Zugriff auf die Datenbank auftretende Konstellation eine weitere KlasseCastException abfangen muss, die readObject() auslösen kann.
Jetzt machen wir bewusst einen Irrtum und lesen zwei Objekte abwechselnd ein. Die zweite readObject() löst eine OptionaleDataException aus, wenn sie nicht auf Daten von Objekten trifft.
Nachdem der Zeiger der internen Dateiposition angehalten wurde, haben wir die Möglichkeit, die lange Nummer im catch()-Block zu lesen. readLong() fragt exakt 8 Bytes ab und deutet sie als lange Nummer. Mit dem nächsten readObject() wird dann der Text gelesen.
Leave a Reply