我正在尝试从机器接收字节数组数据。它发出3种不同类型的数据结构 每个都有不同数量的字段,主要由int和几个浮点数组成,字节大小,第一个是320字节,第二个类型420,第三个类型560。当发送程序启动时,它会以1秒的间隔同时触发所有3种类型的数据。例如:
发送顺序: Pack1 - 320字节 1秒后 Pack2 - 420字节 1秒后 Pack3 - 560个字节 1秒后 Pack1 - 320字节 ... ..
如何在传入字节大小之前检查它:
byte[] handsize = new byte[bytesize];
因为我收到的数据全部乱序,例如使用以下read all int:
System.out.println("Reading data in int format:" + " " + datainput.readInt());
每当我运行我的prog时,我会得到许多不同的值集,尽管有一些有效的字段数据,但它们是 到处都是。
我不太确定我应该怎么做但是我尝试了以下内容,显然我的数据字段不是 按正确顺序接收:
BufferedInputStream bais = new
BufferedInputStream(requestSocket.getInputStream());
DataInputStream datainput = new DataInputStream(bais);
byte[] handsize = new byte[560];
datainput.readFully(handsize);
int n = 0;
int intByte[] = new int[140];
for (int i = 0; i < 140 ; i++) {
System.out.println("Reading data in int format:" + " " + datainput.readInt());
intByte[n] = datainput.readInt();
n = n + 1;
System.out.println("The value in array is:" + intByte[0]);
System.out.println("The value in array is:" + intByte[1]);
System.out.println("The value in array is:" + intByte[2]);
System.out.println("The value in array is:" + intByte[3]);
同样从上面的代码中,用
打印出的值的顺序System.out.println("Reading data in int format:" + " " + datainput.readInt());
和
System.out.println("The value in array is:" + intByte[0]);
System.out.println("The value in array is:" + intByte[1]);
是不同的。
任何帮助将不胜感激。感谢
答案 0 :(得分:1)
修改强> 计算长度的另一种方法是在单个TCP会话中放置单个消息。不推荐,因为它太多开销但它会起作用。
答案 1 :(得分:0)
在循环的每次迭代中,您都会调用datainput.readInt()
两次。您可能希望在每次迭代中只读取一个int。