【问题标题】:Why is ObjectInputStream readObject() throwing EOF exception为什么 ObjectInputStream readObject() 会抛出 EOF 异常
【发布时间】:2014-01-03 21:42:11
【问题描述】:

我被这个非常奇怪的问题困住了。在客户端中,我正在传递对象,例如

try{
    oos.writeObject(new GameStartSerializedObject());
    oos.flush();
}
catch(Exception e){
    e.printStackTrace();
}

在服务器中我正在读取对象

try{
    //Its my turn
    thrown_message = player_reader.readObject();
}
catch(Exception e){

我的问题是为什么我会收到 EOF 异常。我对对象输入流的理解是,当我调用 readObject() 时,我应该阻塞直到我得到一个对象,那么它如何知道是否达到了 eof?请帮忙!

这就是我创建对象流的方式

ois = new ObjectInputStream(socket.getInputStream());
oos = new ObjectOutputStream(socket.getOutputStream());
oos.flush();

另外,在我写入对象并刷新之后,我应该关闭流。我没有关闭它,因为对象是从代码的不同部分一个接一个地定期编写的。

【问题讨论】:

  • EOFException - 表示输入期间意外到达文件结尾或流结尾。来源 (docs.oracle.com/javase/7/docs/api/java/io/EOFException.html)
  • 但是是什么导致了流的结束?它不应该只是阻塞并等待对象可用。
  • 相信很快就会有这个问题的答案。但是,我相信 - 如果您像运行“player_reader.readObject();”那样运行该方法如果对象不可用 - 它将抛出此异常。这是您的问题的参考 - stackoverflow.com/questions/664331/…
  • @e.doroskevic No. 仅在流结束时。 “不可用”只会导致它被阻止。

标签: java sockets objectinputstream


【解决方案1】:

对等方已关闭连接。因此,没有更多的对象可以读取。因此,您已到达流的尽头。尔格readObject() 抛出EOFException.

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多