反序列化通过ObjectOutpoutStream发送的对象

时间:2013-12-05 14:06:26

标签: java sockets tcp

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

String [][] sendable = new String [n][5];
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(sendable);

假设我的数组已使用所有值进行初始化,如何将接收的数据解压缩回二维数组?我的第一种方法就是这样,但由于我对Java和套接字编程比较陌生,所以它引起了问题。

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]);  

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

2 个答案:

答案 0 :(得分:0)

  1. 您需要在两端的ObjectInputStream之前构造ObjectOutputStream。否则,对等体可能会死对象读取对象流标题。

  2. 您需要在套接字的生命周期内构建一次流,而不是每次发送或接收一次。

答案 1 :(得分:-1)

我建议在写下sendable后冲洗操作系统:

os.writeObject(sendable);
os.flush();

您可能还想在官方文档推荐的构造函数后立即调用os.flush():

  

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

请参阅http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#ObjectOutputStream%28java.io.OutputStream%29

相关问题