【发布时间】:2011-02-18 20:10:41
【问题描述】:
我正在创建一个可能很长的对象日志,并且不想在写入文件之前将它们全部保存在内存中,因此我无法将对象的序列化集合写入文件。在记录完成后,我正在尝试找出读取整个对象流的“最佳”方式。
我注意到以下内容不起作用:
FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
while ((obj = in.readObject()) != null) {
// do stuff with obj
}
因为流在到达文件末尾而不是返回 null 时会引发异常(可能是因为可以将 null 写入/读取到对象流,导致上述循环无法按预期运行)。
有没有比上述循环更好的方法来完成我想要完成的事情:
FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
try {
while (true) {
obj = in.readObject();
// do stuff with obj
}
} catch (EOFException e) {
}
这似乎有点笨拙。对于文件结束对象解决方案,以下是最好的方法吗?
private static final class EOFObject implements Serializable {
private static final long serialVersionUID = 1L;
}
void foo() {
Object obj;
while (!((obj = in.readObject()) instanceof EOFObject)) {
BidRequest bidRequest = ((BidRequestWrapper) obj).getBidRequest();
bidRequestList.add(bidRequest);
}
}
【问题讨论】:
标签: java serialization