【问题标题】:Java ObjectOutputStream IOExceptionJava ObjectOutputStream IOException
【发布时间】:2012-08-08 18:14:10
【问题描述】:

我创建了一个简单的对象,我试图通过 OOS 发送它,但每次我尝试发送我创建的类时都会引发 IOException。但是,如果我尝试通过我知道可序列化的对象发送对象,它不会引发错误。

UserName userName = new UserName();
_out.write("Object is Made! \n");
serverOutput.writeObject(userName);
serverOutput.flush();

这是用户名代码:

public class UserName implements Serializable {

private String _userName;

public UserName(String userName) {
    _userName = userName;
}

public UserName(){
    _userName = "John Doe";
}

/**
 * @return the _userName
 */
public String get_userName() {
    return _userName;
}

/**
 * @param _userName the _userName to set
 */
public void set_userName(String userName) {
    _userName = userName;
}

}

如果我这样做,那么它不会抛出错误:

UserName userName = new UserName();
_out.write("Object is Made! \n");
serverOutput.writeObject(new String());
serverOutput.flush();

我真的必须实现任何方法还是我忘记了什么?

【问题讨论】:

  • IOException 说明了什么?
  • 如何检查?打印堆栈跟踪?我从 .jar 可执行文件运行它
  • 通过 CMD 运行,未捕获的异常堆栈跟踪将打印到系统控制台。
  • java.net.SocketException:连接被对等方重置:在 java.net.SocketOutputStream.socketWrite(Unknown Source) 处 java.net.SocketOutputStream.socketWrite0(Native Method) 处的套接字写入错误。 .SocketOutputStream.write(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source) at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)跨度>
  • 在 java.io.ObjectOutputStream.writeClassDesc(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream .writeFatalException(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at Code.Client.main(Client.java:83)

标签: java ioexception objectoutputstream


【解决方案1】:

接收端可能已经关闭了连接。也许那里也有例外?

【讨论】:

  • 是的,我意识到程序在另一个程序读取对象之前完成了执行。有没有办法阻止线程直到它完成?
  • @ReCoNciLiaTon 你误解了我的回答。可能是接收端关闭了连接,因此您无法对其进行写入。解决方案是修复应用程序协议的实现,可能通过首先正确定义它,以便对等方在读取了他们应该读取的所有内容之前不会关闭连接。不需要“阻止”,只需正确的逻辑即可。
猜你喜欢
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2016-02-03
  • 2013-04-18
  • 2015-01-03
  • 2016-05-31
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多