需要帮助接收ByteArray数据

时间:2010-03-22 10:31:32

标签: java

我正在尝试从机器接收字节数组数据。它发出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]);

是不同的。

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

你不能。你需要在数据之前显式地发送数据长度(或者你将从中获得长度的数据类型),或者使用另一种方法来查看数据并找出它的长度(自描述,就像一个空终止的字符串)。 / p>

修改 计算长度的另一种方法是在单个TCP会话中放置单个消息。不推荐,因为它太多开销但它会起作用。

答案 1 :(得分:0)

在循环的每次迭代中,您都会调用datainput.readInt()两次。您可能希望在每次迭代中只读取一个int。