У меня была такая же проблема сегодня. Хотя вопрос довольно старый, проблема остается, и не было никакого чистого решения. Игнорирование EOFException
следует избегать, поскольку оно может быть выброшено, если какой-то объект был сохранен неправильно. Написание null, очевидно, не позволяет использовать нулевые значения для любых других целей. Наконец, использование available()
в потоке объектов всегда возвращает ноль, так как количество объектов неизвестно.
Мое решение довольно простое. ObjectInputStream
- это всего лишь оболочка для другого потока, такого как FileInputStream. Хотя ObjectInputStream.available()
возвращает ноль, FileInputStream.available вернет некоторое значение.
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++;
}
Я делаю то же самое, но я закрываю активный журнал. Я бы хотел, чтобы он подождал, пока на нем написано больше данных, но скажите мне, когда это будет написано. Я не уверен, есть ли способ сделать это, не поймав исключение. (Хвостовая часть работает нормально, она просто выводит ее, когда она выполняется, это меня подталкивает) –