我在尝试通过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]);
如何检索作为对象发送的二维数组?
答案 0 :(得分:0)
您需要在两端的ObjectInputStream之前构造ObjectOutputStream。否则,对等体可能会死对象读取对象流标题。
您需要在套接字的生命周期内构建一次流,而不是每次发送或接收一次。
答案 1 :(得分:-1)
我建议在写下sendable后冲洗操作系统:
os.writeObject(sendable);
os.flush();
您可能还想在官方文档推荐的构造函数后立即调用os.flush():
创建一个写入指定OutputStream的ObjectOutputStream。此构造函数将序列化流标头写入基础流;调用者可能希望立即刷新流以确保接收ObjectInputStreams的构造函数在读取头时不会阻塞。