【发布时间】: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