如何从java.io.ObjectInputStream中很好地读取未知数量的对象?

时间:2011-04-04 12:07:44

标签: java serialization file-io

我发现this page建议循环,直到抛出异常,然后处理该异常。

基本上它建议的是:

[...]
try {
    while (true) {
        objectInputStream.readObject();
    }
}
catch ( EOFException e ) {
    \\ This ALWAYS happens
}
[...]

然而,正如Bloch把它放在Effective Java中,人们应该只使用异常条件下的异常,并且现在没有包含无限数量对象的输入流没有什么特别之处?它会每次都发生!

由于ObjectInputStream上没有hasNext方法,我该怎么办?我是否真的坚持使用Exception知道什么时候没有更多的对象可供阅读?

1 个答案:

答案 0 :(得分:9)

在我看来,有很多方法可以做到这一点,所有这些都很好:

  • 使用例外。如你所说,API设计者没有包括一个检查是否有更多的方法,所以这部分是他们的错误

  • 在写入流时使用标记对象。例如Integer.MAX_VALUE或自定义EOFMarker对象。如果找到,请停止。

  • 不要自己写对象,而是写一个List。然后阅读清单