我正在尝试通过套接字发送一些数据。前3个数据项成功发送,但是当我尝试发送双数组时,则抛出异常。 让我们来看看代码: 客户端:
Socket clisock=new Socket("127.0.0.1",1341);
Scanner sc1=new Scanner(clisock.getInputStream());
PrintStream p=new PrintStream(clisock.getOutputStream());
p.println(num_doc);
p.flush();
p.println(TD);
p.flush();
p.println(num_Decimal);
p.flush();
ObjectOutputStream os=new ObjectOutputStream(clisock.getOutputStream());
os.writeObject(server_index);
服务器端:
int number;
long keyword, keywords;
double[][] server_ind;
ServerSocket s1=new ServerSocket(1341);
Socket ss=s1.accept();
Scanner sc=new Scanner(ss.getInputStream());
number=sc.nextInt();
keyword=sc.nextLong();
keywords=sc.nextLong();
ObjectInputStream is = new ObjectInputStream(ss.getInputStream());
server_ind=(double[][])is.readObject();
异常:java.io.StreamCorruptedException:无效的流标题:FAD08000
注意:在发布此问题之前,我已经搜索了类似的例外情况,但还没有成功删除该例外。
答案 0 :(得分:1)
扫描仪被缓冲,因此它将读取尽可能多的内存(达到它的缓冲区大小)
这意味着如果您并不意味着扫描仪会读取所有数据并将其中的一些数据作为二进制对象读取,那么您就会遇到问题。
更简单的解决方案是坚持使用一种流类型。当你需要对象流时,只需端对端地使用它,你就不会感到困惑。
java.io.StreamCorruptedException:无效的流标题:FAD080
这意味着扫描程序已经使用了对象流标题,因此当对象流尝试读取某些数据时,它正在读取流中更远的一些数据。