Unbekannte Anzahl serialisierter Objekte lesen

TiME-SPLiNTER

Aktives Mitglied
Hallo 😀

Ich habe mal wieder ein Problem... oder ich seh den Wald vor lauter Bäumen nicht mehr...

Ich serialisiere und speichere Objekte in eine Datei (tasks.xml).

Jetzt möchte ich diese wieder deserialisieren und in eine ArrayList<Task> speichern. Dazu verwende ich folgende Methode:

Java:
	public void loadTasks() {
		FileTools.checkAndCreateFile("tasks.xml");
		
		ObjectInputStream objIn;
		try {
			objIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("tasks.xml")));
		
			while(true) {
				tasks.add((Task) objIn.readObject());	
			} 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

Ich weiss, dass mit readObject() automatisch immer das nächste Objekt gelesen wird, nur: wie weiss ich wann ich das letzte Objekt gelesen habe?

Mein Ansatz ist mit einer while()-Schleife... aber vllt geht es auch anders. Ich bekomme jetzt immer eine EOFException:

Code:
java.io.EOFException
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)

Wäre super wenn mir da jemand weiterhelfen könnte 😀
 
EOFException ist nicht zum umgehen, deshalb besser vorher wissen, wieviele Objekte drin sind,
speichere z.B. eine Java-Liste, dann ist es genau ein Objekt, einfach zu merken,

die Liste kannst du dann nach size() fragen usw.


----

ObjectInputStream buffert glaube ich selber, ansonsten müsste das ja jeder Programmierer auf der Welt immer dazuschreiben,
BufferedInputStream() kannst du streichen
 

Neue Themen


Zurück
Oben