我正在读取包含许多序列化对象的文件。
我想将它们反序列化,并意识到我们不能像readObject
那样使用readLine
即
while (ois.readObject != null) {
}
会抛出异常。根据我的知识,我们还没有hasNext
和next
种机制。
如何在现实世界中修复阅读对象的问题?
答案 0 :(得分:2)
捕获EOFException,并在获得它时关闭并中断。
readObject()只有在写入null时才返回null,并且不必暗示流的结束。
答案 1 :(得分:0)
假设您正在尝试加载Person对象,您可以尝试类似:
ArrayList<Person> persons = new ArrayList();
while (true) {
try {
persons.add((Person) ois.readObject());
} catch (EOFException e) {
break;
}
}
或者不是序列化单个对象,而是可以将对象添加到数组或arraylist并序列化列表对象。然后,您可以轻松地反序列化列表对象,而不必处理EOFException
。请参阅John Purcell's serialization tutorial中的示例。