Предположим, вы имели в виду ObjectInputStream
и p = obj.readObject()
.
Я хотел бы сделать что-то вроде этого: (это неправильно, см. ПРАВКА ниже)
FileInputStream fstream = new FileInputStream(fileName);
try {
ObjectInputStream ostream = new ObjectInputStream(fstream);
while (ostream.available() > 0) {
Object obj = ostream.readObject();
// do something with obj
}
} finally {
fstream.close();
}
РЕДАКТИРОВАТЬ
Я забираю это!EJP справедливо указывает на то, что использование available()
здесь неверно.Я думаю, что фиксированный код может быть:
FileInputStream fstream = new FileInputStream(fileName);
try {
ObjectInputStream ostream = new ObjectInputStream(fstream);
while (true) {
Object obj;
try {
obj = ostream.readObject();
} catch (EOFException e) {
break;
}
// do something with obj
}
} finally {
fstream.close();
}
Хотя документация для readObject()
прямо не говорит о том, что EOFException
выбрасывается в конце потока, это, кажется, подразумевается и может бытьединственный способ обнаружить конец потока.
Другой вариант, если вы управляете кодом, который написал поток, - это запись числа объектов в начале или флага после каждого объекта, указывающего, является ли предыдущий объектбыл последним.