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

jon*_*alv 2 java file-io serialization

我发现这个页面建议循环,直到抛出异常,然后处理该异常.

基本上它的建议是:

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

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

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

Boz*_*zho 9

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

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

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

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