Hallo zusammen
Wie ist eine EOFException möglich, wenn der Reader ausdrücklich nur so lange lesen soll, bis er am Ende der Datei ist?
Meinem Verständnis nach sollte doch durch ( while ((oo = ois.readObject()) != null)) ausgeschlossen sein, dass ein EOF-Fehler fliegt?
Hier die Methode, um die es geht:
Geschrieben wurde die Datei mit:
Und ich erhalte den Fehler beim Ausführen der JUnit-Tests:
Ich schreibe zuvor in die leere Datei zwei Objekte der Klasse A, die jeweils ein Objekt der Klassen B und C als Eigenschaft haben.
Beide Objekte Typ A werden gelesen (->geprüft durch Syso), dann fliegt die Exception. Warum?
Wie ist eine EOFException möglich, wenn der Reader ausdrücklich nur so lange lesen soll, bis er am Ende der Datei ist?
Meinem Verständnis nach sollte doch durch ( while ((oo = ois.readObject()) != null)) ausgeschlossen sein, dass ein EOF-Fehler fliegt?
Hier die Methode, um die es geht:
Java:
public static void entserialisiere(String dateiname) throws IOException{
FileInputStream fis = null;
ObjectInputStream ois = null;
Object oo = null;
try {
fis = new FileInputStream(new File(dateiname));
ois = new ObjectInputStream(fis);
while ((oo = ois.readObject()) != null){
MeinStaticHashset.schreibeDatensatz(oo);
};
}
catch (IOException e) {System.err.println(e);}
catch (ClassNotFoundException e) {System.err.println( e );}
finally {
try {fis.close();} catch (Exception e) {}
try {ois.close();} catch (Exception e) {}
}
Geschrieben wurde die Datei mit:
Java:
public static void serialisiere(String dateiname, HashSet<Object> alleObjekte) throws IOException{
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(new File(dateiname));
oos = new ObjectOutputStream(fos);
for (Object oo: alleObjekte){
oos.writeObject(oo);
}
}
catch (IOException e) {throw e;}
finally {
try {fos.close();
}catch(Exception e) {e.printStackTrace();}
}
}
Und ich erhalte den Fehler beim Ausführen der JUnit-Tests:
Java:
@Test
public final void testDeserialisiere() {
try {
DateiEA.entserialisiere("./src/Datenbanksim");
} catch (IOException e) {
e.printStackTrace();
assertNull(e);
}
//Debug-Ausgabe
System.out.println(MeinStaticHashSet.simGBelegungTabelle.size());
assertTrue(0<MeinStaticHashSet.simGBelegungTabelle.size());
}
Ich schreibe zuvor in die leere Datei zwei Objekte der Klasse A, die jeweils ein Objekt der Klassen B und C als Eigenschaft haben.
Beide Objekte Typ A werden gelesen (->geprüft durch Syso), dann fliegt die Exception. Warum?