Ich hatte das gleiche Problem heute. Obwohl die Frage ziemlich alt ist, bleibt das Problem bestehen und es gab keine saubere Lösung. Ignorieren EOFException
sollte vermieden werden, da es geworfen werden kann, wenn ein Objekt nicht korrekt gespeichert wurde. Das Schreiben von null verhindert offensichtlich, dass Sie für andere Zwecke Nullwerte verwenden. Schließlich gibt available()
für den Objektstrom immer Null zurück, da die Anzahl der Objekte unbekannt ist.
Meine Lösung ist ziemlich einfach. ObjectInputStream
ist nur ein Wrapper für einen anderen Stream, z. B. FileInputStream. Obwohl ObjectInputStream.available()
Null zurückgibt, gibt FileInputStream.available einen Wert zurück.
FileInputStream istream = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(istream);
/** calculate number of items **/
int line_count = 0;
while(istream.available() > 0) // check if the file stream is at the end
{
(String)ois.readObject(); // read from the object stream,
// which wraps the file stream
line_count++;
}
Ich mache das gleiche - aber ich bin ein aktives Protokoll. Ich möchte es warten, bis mehr Daten da sind, solange das Programm schreibt, aber sagen Sie mir, wenn es fertig ist zu schreiben. Ich bin nicht sicher, ob es einen Weg gibt, dies zu tun, ohne die Ausnahme zu fangen. (Der Tailing-Teil funktioniert gut, es wird nur zum Beenden gebracht, wenn es fertig ist, das nervt mich) –