我正在从ObjectInputStream中读取,但我事先不知道对象的数量。因此,使用EOF异常捕获块来检测是否已到达文件的END并关闭该文件。
-
这是一个好的/安全的编程实践吗?
-
如果这不是一个好的方法,可以用更好的方式来做吗?
您没有太多选择。当对象用完时,ObjectInputStream.readObject()抛出EOFException。除非您自己将EOS冗余编码到流中,否则您必须捕获EOFException。
是的,如果您以串行方式读取对象(以串行方式写入,即o1、o2、o3),并且流中绝对没有其他信息。
有两种方法可以解决这个问题:
- 通过将列表写入包含元素的文件,然后让客户端读取单个对象
- 通过在流的开头写一个int,表示客户端可以期望的对象数量
如果你在网络上发送对象流,它会有点麻烦,但话说回来,你最好使用RMI,而不是尝试手动编码。
使用available()
方法对您来说是一种替代方法吗?你能指望流在EoF之前不返回零吗?