Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectStream崩溃_Java_Sockets_Stream - Fatal编程技术网

Java ObjectStream崩溃

Java ObjectStream崩溃,java,sockets,stream,Java,Sockets,Stream,今天我遇到了一个ObjectStream(输入和输出)问题。 我使用了直接来自套接字的输入和输出流 初始化流时,我的跑步和跑步。没有错误消息。 我没有收到错误信息。 ObjectInputStream的构造函数似乎运行得无穷无尽 下面是存在问题的代码。 socket.isConnected为true ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream oos = ne

今天我遇到了一个ObjectStream(输入和输出)问题。 我使用了直接来自套接字的输入和输出流

初始化流时,我的跑步和跑步。没有错误消息。 我没有收到错误信息。 ObjectInputStream的构造函数似乎运行得无穷无尽

下面是存在问题的代码。 socket.isConnected为true

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

有什么想法吗?

对象输入流读取由它构造的对象输出流发送的头。如果您尚未发送标题,它将永远等待

简单的解决方案是始终首先创建对象输出流,然后在创建对象输入流之前刷新它。

我发现了这一点

在ObjectInputStream之前创建ObjectOutputStream 如果您正在编写使用ObjectInputStream和ObjectOutputStream双向传输数据的代码,请注意首先构造ObjectOutputStream

如果您先构造ObjectInputStream,则两端都将阻塞,并最终在构造函数中失败。这是因为输入流构造函数等待从ObjectOutputStream open()到达的初始字节字符串。在单向情况下,一边在写,另一边在读,一切都很顺利。然而,在双向情况下,如果双方都试图首先构造输入流,那么双方都在等待另一方构造输出流,并且双方都不能继续

如果异常处理允许在构造输入流失败后继续通信,则此问题的症状是双方都阻塞一段时间,一方获得异常并继续构造ObjectOutputStream。另一端则能够构造其ObjectInputStream,因为初始化序列刚刚到达

幸运的是,解决办法很简单。将ObjectOutputStream的创建移到ObjectInputStream的创建之前。然后,每一端将在尝试打开其输入流之前传输初始化序列。初始化序列已准备就绪并等待,因此输入流的构造将正常进行,然后可以毫不延迟地开始对象传输


您能描述一下发生故障时的错误是什么吗?没有任何故障。程序在objectinputstream构造函数中无休止地运行……那么为什么编写它会崩溃呢?