我发现this page建议循环,直到抛出异常,然后处理该异常。
基本上它建议的是:
[...]
try {
while (true) {
objectInputStream.readObject();
}
}
catch ( EOFException e ) {
\\ This ALWAYS happens
}
[...]
然而,正如Bloch把它放在Effective Java中,人们应该只使用异常条件下的异常,并且现在没有包含无限数量对象的输入流没有什么特别之处?它会每次都发生!
由于ObjectInputStream上没有hasNext
方法,我该怎么办?我是否真的坚持使用Exception知道什么时候没有更多的对象可供阅读?
答案 0 :(得分:9)
在我看来,有很多方法可以做到这一点,所有这些都很好:
使用例外。如你所说,API设计者没有包括一个检查是否有更多的方法,所以这部分是他们的错误
在写入流时使用标记对象。例如Integer.MAX_VALUE
或自定义EOFMarker
对象。如果找到,请停止。
不要自己写对象,而是写一个List
。然后阅读清单