ObjectInputStream
-
Hallo,
Ich moechte mit dem ObjectOutputStream
Objekte aus einer Datei lesen.
Dazu nehme ich readObject().
Wie kann ich jetzt aber ueberpruefen, ob
die Datei schon leer ist ?Harri
-
Was heisst "schon leer"?
-
Mein Problem ist, dass ich nicht genau weiß, wie die Methode
readObject() von ObjectInputStream arbeitet.
Ich hatte es mir so vorgestellt:
Befinden sich mehrere serialisierte Objekte des gleichen Typs in einer Datei, aus der mit readObject() ausgelesen werden soll, so muss diese Methode ja immer
genau sehen, wo ein neues Objekt beginnt.
Mit "die Datei ist leer" meinte ich, dass es kein nachfolgendes Objekt mehr gibt.
Mein Wunsch war, so lange mit readObject aus der Datei zu lesen, bis das
vorhergehende Objekt kein nachfolgendes Objekt mehr besitzt.
D.h. ich möchte aus einer Datei alle serialisierten Objekte gleichen Typs auslesen. Wie setze ich das mit dem ObjectInputStream und seiner
Methode readObject() um ?
-
In einer Datei befindet sich stets ein Objekt - nicht mehrere. Genau so wie in einem Word-Doc-File auch nur ein Dokument enthalten ist. Da wird nämlich auch nur serialisiert.
-
CengizS schrieb:
In einer Datei befindet sich stets ein Objekt - nicht mehrere. Genau so wie in einem Word-Doc-File auch nur ein Dokument enthalten ist. Da wird nämlich auch nur serialisiert.
Falsch! mit ObjectOutputStream kann man per WriteObject mehrere Objekte in eine Datei schreiben und auch mehrere wieder auslesen
-
Ok das stimmt allerdings muss man auch bedenken, dass damit die Reihenfolge der Objekte wie sie eingetragen wurden immer bekannt sein muss. Aus der Fragestellung geht dies allerdings nicht hervor. Er will über die Objekte in der Datei iterieren und weiss somit nichts über den Typ. Insofern macht die Serialisierung von mehreren miteinander nicht irgendwie verknüpften Objekten keinen Sinn. Das ist natürlich IMHO
-
hm... sowas könnte gehen
boolean done = false; do { try { Object o = objin.readObject(); MeinObject mo = (MeinObject)o; //mach irgendwas mit mo } catch(Excepion e) { done = true; } } while(!done);
-
Ich verstehe das Problem nicht ganz. Hast du einen Container mit einer unbestimmten Anzahl an Objekten? Dann serialisiere doch den ganzen Container und stelle diesen (1 Objekt) wieder her.
-
Hi javaprofi,
Vielen Dank. Das ist super. Es klappt.
An so etwas hatte ich auch schon gedacht,
dass das Ende eines Streams mit einer Exception angezeigt wird.
Bei mir ist das jetzt hier die EOFException, die das Ende eines Files anzeigt.Super und vielen Dank, Harri