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 反序列化通过ObjectOutputStream发送的对象_Java_Sockets_Tcp - Fatal编程技术网

Java 反序列化通过ObjectOutputStream发送的对象

Java 反序列化通过ObjectOutputStream发送的对象,java,sockets,tcp,Java,Sockets,Tcp,我在尝试通过ObjectOutputStream接收字符串的二维/数组时遇到问题。 我发送数组的代码是: String [][] sendable = new String [n][5]; ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream()); os.writeObject(sendable); 假设我的数组已用所有值初始化,如何将接收到的数据解包回二维数组?我的第一种方法是这样,但它一直在引起问题,因

我在尝试通过
ObjectOutputStream
接收
字符串的二维/数组时遇到问题。
我发送数组的代码是:

String [][] sendable = new String [n][5];
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(sendable);
假设我的数组已用所有值初始化,如何将接收到的数据解包回二维数组?我的第一种方法是这样,但它一直在引起问题,因为我对Java和socket编程相对较新

ObjectInputStream ois =new ObjectInputStream(clientSocket.getInputStream());
String insa[][] = null;         

try{
    insa= (String[][]) ois.readObject();
} catch (ClassNotFoundException ex){
    ex.printStackTrace();
}

System.out.println(insa[0][1]);  

如何检索作为对象发送的二维数组?

我建议在写入sendable后刷新操作系统:

os.writeObject(sendable);
os.flush();
您可能还希望按照官方文档的建议,在构造函数之后立即调用os.flush()

创建写入指定输出流的ObjectOutputStream。此构造函数将序列化流头写入基础流;调用者可能希望立即刷新流,以确保接收ObjectInputStreams的构造函数在读取标头时不会阻塞

  • 您需要在两端的ObjectInputStream之前构造ObjectOutputStream。否则,对等方可能会死锁读取对象流头

  • 在套接字的生命周期中,您需要构造两个流一次,而不是每次发送或接收一次


  • 乍一看,这应该行得通。您看到了什么问题?在objectinputstream声明之后,客户端应用程序没有响应。这是因为它卡在等待输入的while循环中。我建议它卡在ObjectInputStream构造函数中。该代码没有必要。如果存在BufferedOutputStream,您将是正确的。ObjectOutputStream不是BufferedOutputStream,但它有一个内部缓冲区。这就是它实现Flushable接口并提供flush()方法的原因。当然可以看到,但在调用writeObject()后不需要刷新。