У меня была такая же проблема сегодня. Хотя вопрос довольно старый, проблема остается, и не было никакого чистого решения. Игнорирование 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++;
}