【发布时间】:2014-04-19 05:30:15
【问题描述】:
我正在读取一个包含许多序列化对象的文件。
我想反序列化它们并意识到我们不能像readLine 那样使用readObject,即
while (ois.readObject != null) {
}
会抛出异常。据我所知,我们也没有hasNext 和next 之类的机制。
在现实世界中读取对象的问题是如何解决的?
【问题讨论】:
标签: java serialization io
我正在读取一个包含许多序列化对象的文件。
我想反序列化它们并意识到我们不能像readLine 那样使用readObject,即
while (ois.readObject != null) {
}
会抛出异常。据我所知,我们也没有hasNext 和next 之类的机制。
在现实世界中读取对象的问题是如何解决的?
【问题讨论】:
标签: java serialization io
捕捉 EOFException,当你得到它时关闭和中断。
readObject() 仅在您写入 null 时才返回 null,这并不一定意味着流的结束。
【讨论】:
假设您正在尝试加载 Person 对象,您可以尝试以下操作:
ArrayList<Person> persons = new ArrayList();
while (true) {
try {
persons.add((Person) ois.readObject());
} catch (EOFException e) {
break;
}
}
或者,您可以将对象添加到数组或数组列表并序列化列表对象,而不是序列化单个对象。然后您可以轻松地反序列化列表对象,而不必处理EOFException。请参阅John Purcell's serialization tutorial 中的示例。
【讨论】:
try里面。这样你就可以避免break。在您之前的代码中,它还可以避免第二级 try/catch。