2

我正在从 ObjectInputStream 读取数据,但我事先不知道对象的数量。因此,使用 EOF 异常捕获块来检测已到达文件的 END 并关闭文件。

  • 这是一个好的/安全的编程习惯吗?

  • 如果它不是一个好方法,可以以更好的方式完成吗?

4

3 回答 3

1

是的,如果您以串行方式读取对象(以串行方式写入,即 o1、o2、o3)并且流中绝对没有其他信息。

有两种方法可以解决这个问题:

  • 通过将列表写入包含元素的文件,然后让客户端读取单个对象,列表
  • 通过在流的开头写一个 int 来表示客户端可以期望的对象的数量

如果您通过网络发送对象流,它会有点麻烦,但话又说回来,您最好使用 RMI,而不是尝试手动编码。

于 2011-06-29T17:32:09.290 回答
1

你没有太多选择。当您用完对象时,ObjectInputStream.readObject() 会抛出 EOFException。除非您自己将 EOS 冗余编码到流中,否则您必须捕获 EOFException。

于 2011-06-30T10:50:41.200 回答
0

使用该available()方法会成为您的替代方法吗?您可以依靠在 EoF 之前不返回零的流吗?

于 2011-06-29T19:25:51.287 回答