ObjectInputStream - Wann ist Ende erreicht?

Status
Nicht offen für weitere Antworten.

Bohne

Aktives Mitglied
Ich habe eine Reihe von Objekten in eine Datei serialisiert, die ich nun wieder auslesen möchte. Im Prinzip funktioniert unten stehende Funktion prima, allerdings wird die Schleife nicht rechtzeitig abgebrochen und ich erhalte eine java.io.EOFException. Gibt es eine Möglichkeit das zu unterbinden?

Code:
public void readFromFile(String filename)
	throws IOException, ClassNotFoundException {
		FileInputStream fs = new FileInputStream(filename);
		ObjectInputStream is = new ObjectInputStream(fs);
		Object o;
		do {
			o = is.readObject(); // Ich nehme an, die Exception wird hier ausgelöst, wenn o=null ist, bzw es kein Objekt mehr in der Datei gibt.
			this.push(o);
		} while (o != null);	
 }

Danke!
 
B

bygones

Gast
du kannst per available() nachfragen ob es noch was zu lesen gibt
 

L-ectron-X

Gesperrter Benutzer
Probiere mal
Code:
Object o;
while ((o = is.readObject()) != null) { 
   this.push(o); 
}
 
G

Gast

Gast
Also die Lösung von L-ectron-X liefert liefert wieder das gleiche Ergebnis.
Komischer Weise liefert "is.available()" Null zurück, obwohl drei Objekte serialisiert wurden. Von Hand kann ich sie auch auslesen (ohne Fehler):

Code:
	public void readFromFile(String filename)
	throws IOException, ClassNotFoundException {
		FileInputStream fs = new FileInputStream(filename);
		ObjectInputStream is = new ObjectInputStream(fs);
		Object o;
		o = is.readObject();
		this.push(o);
		o = is.readObject();
		this.push(o);
		o = is.readObject();
		this.push(o);
	}

Setze ich noch eine Zeile "o = is.readObject();" kommt wieder der gleiche Fehler. Zumindest weiß ich jetzt, dass er in der Zeile steckt, aber wie man ihn umgehen kann...
 

SebiB90

Top Contributor
Gast hat gesagt.:
Also die Lösung von L-ectron-X liefert liefert wieder das gleiche Ergebnis.
das glaub ich eher nicht. was kommt denn da genau raus?

Gast hat gesagt.:
Setze ich noch eine Zeile "o = is.readObject();" kommt wieder der gleiche Fehler. Zumindest weiß ich jetzt, dass er in der Zeile steckt, aber wie man ihn umgehen kann...
ist klar das der fehler kommt, wenn es nix mehr zum lesen gibt, gibt es nix mehr zu lesen, ganz einfach
 
B

bygones

Gast
readObject liefert nicht null zurück, wenn es nichts mehr gibt. mhm eigentlich sollte die available methode funktionieren ?!
 
R

Roar

Gast
du musst vorher reinschreiben wieviele objekte gesendet werden, alles andere is unschön.
 

Bleiglanz

Gesperrter Benutzer
available sagt doch nur was über den Buffer, aus available = 0 kann man nicht EOF folgern (Netzwerkkabel kurz mal ausgesteckt)

du musst vorher reinschreiben wieviele objekte gesendet werden, alles andere is unschön.
noch schöner finde ich es, immer genau 1 Objekt zu übertragen und notfalls ein Array oder irgendeine Collection zu verwenden
 
R

Roar

Gast
Bleiglanz hat gesagt.:
du musst vorher reinschreiben wieviele objekte gesendet werden, alles andere is unschön.
noch schöner finde ich es, immer genau 1 Objekt zu übertragen und notfalls ein Array oder irgendeine Collection zu verwenden
jo, aber wenn man vorher nicht weiß wieviele objekte gesendet werden fallen meine lösung und die lösung mit nem array raus. aber readObject() wartet ja auch nicht bis was da ist, sondern wirft direkt die exception. wie ginge das dann "immer genau 1 objekt zu übertragen" ?
 

Bleiglanz

Gesperrter Benutzer
erst alles in einer ArrayList oder Vector sammeln und dann diese verwenden?

macht die Sache doch eher einfacher...ein Objekt rein in die Datei, eins wieder raus...
 

Bohne

Aktives Mitglied
Ich hab jetzt den Fehler (eine EOFException) einfach abgefangen und gesagt, dass die Schleife beendet werden soll, falls die Exception eintritt:

Code:
public void readFromFile(String filename)
	throws IOException, ClassNotFoundException {
		FileInputStream fs = new FileInputStream(filename);
		ObjectInputStream is = new ObjectInputStream(fs);
	
		while (true) {
			Object o;
			try {
				o = is.readObject();
			} catch (EOFException e) {
				break;
			}
			this.push(o);
		}
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Auslesefehler beim ObjectInputStream(Array) Allgemeine Java-Themen 6
P ObjectOutputStream oder ObjectInputStream fehlerhaft? Allgemeine Java-Themen 7
K Input/Output ObjectInputStream.HandleTable OutOfMemory Allgemeine Java-Themen 8
P ObjectInputStream kann nicht vernünftig lesen... Allgemeine Java-Themen 9
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
T Klasse in externer JAR mit ObjectInputStream Allgemeine Java-Themen 14
J ObjectInputStream und OutOfMemory Allgemeine Java-Themen 10
M Exceptions - wann / wie verwenden? Allgemeine Java-Themen 4
LimDul Spezifkation, wann es deprecation Warnings gibt Allgemeine Java-Themen 1
N Streams wann .filtern? Allgemeine Java-Themen 2
perlenfischer1984 Wann ist ein Parameter Check sinnvoll Allgemeine Java-Themen 7
T GUICE- Dependency Injection- WANN nutze ich Providers? Allgemeine Java-Themen 2
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
Rudolf Wann System.exit und wann dispose? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
X Wann ist Runtime.getRuntime().exec mit Copy fertig? Allgemeine Java-Themen 10
M Wann ist MVC sinnvoll? Allgemeine Java-Themen 14
M Wann Membermethoden, wann statische Utility-Methoden? Allgemeine Java-Themen 24
Ark Wann 64 Bit-Befehle im Einsatz? Allgemeine Java-Themen 6
G Wann normale Exception und wann Runtimeexception Allgemeine Java-Themen 12
Y Wann folgende Technologien benutzen Allgemeine Java-Themen 5
G Parameter oder Attribut (wann nehme ich was?) Allgemeine Java-Themen 12
M Wann verwendet man PropertyChangedEvents, wann eigene? Allgemeine Java-Themen 3
F Wann und wie Exceptions einsetzen? Allgemeine Java-Themen 13
G Wann statische Methoden, statische Attributen? Allgemeine Java-Themen 7
G Ab wann Datenbank verwenden Allgemeine Java-Themen 15
B Wann Interface und wann Adapter Allgemeine Java-Themen 4
D Wann ist das ergebnis einer Rechnung eine Double? Allgemeine Java-Themen 7
M Maximal verfügbarer Hauptspeicher? Ab wann wird ausgelagert? Allgemeine Java-Themen 13
P Wann kommt denn nun 1.5 überhaupt? Allgemeine Java-Themen 6
Robertop BigDecimal ergänzt unnötige 0 am Ende Allgemeine Java-Themen 6
Joker4632 Klassen Buffered Reader liest die Leerzeichen am Zeilen Ende nicht mehr Allgemeine Java-Themen 2
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
OnDemand String splitten (mit Anfang und Ende) Allgemeine Java-Themen 11
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
M String shuffeln, Anfang und Ende aber bleiben gleich Allgemeine Java-Themen 15
M Methoden Methode führt Ende vor dem Anfang aus Allgemeine Java-Themen 7
S Threads Ende sämtlicher Threads abwarten Allgemeine Java-Themen 6
T Problem mit gzip Stream und Ende der Datei Allgemeine Java-Themen 2
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
M itext Leerzeichen am ende unterstreichen Allgemeine Java-Themen 4
O Wie kann ich das Ende eines Threads melden? Allgemeine Java-Themen 7
F externes Programm beginnt erst nach dem ende des mainprogrammes Allgemeine Java-Themen 3
E Text ans Ende einer Textdatei anfügen Allgemeine Java-Themen 2
D Java Thread, Bild wird nur am Ende gezeichnet Allgemeine Java-Themen 5
L Warten bei mehreren Threads, bis Ende erreicht ist Allgemeine Java-Themen 2
J Listener für Ende eines Threads gesucht... Allgemeine Java-Themen 5
E beim Ende der main() das Programm nicht beenden Allgemeine Java-Themen 3
D Ans Ende einer txt Datei schreiben Allgemeine Java-Themen 13
R RandomAccessFile springt zum Ende Allgemeine Java-Themen 11
K Scanner.hasNext findet kein Ende Allgemeine Java-Themen 6
S MediaTracker nutzen um festzustellen ob schreibvorgang ende. Allgemeine Java-Themen 5
D das Ende eines Threads Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben