2012-06-14 48 views
0

我从我的数组(byte []数据)接收来自simulink udp块的udp数据。数据打包为int32,所以首先我需要解压。java:接收UDP数据包以及如何保存它们

我不知道如何保存这些数据才能使用它。这些数据是位置,我想用OpenGL ES将它们可视化。 我想将数据保存到一个数组中,并且能够在下一次迭代中将下一个数据包添加到该数组中,而不是重写整个数组(因为循环)

数据的大小为1200 * 96现在。数组是一个很好的选择?

 int j = 0 ; 
    float[] bin1 = new float[(data.length/2)]; 
    while (j < data.length) { 
    if (data[2*j+2] >= 0 ) { 

     String unhx =(binary(data[2*j+3])+binary(data[2*j+2])+binary(data[2*j+1])+binary(data[2*j])); 
     float unbin = ((float)unbinary(unhx)/100); 
     bin1[j/2] = unbin; 
     print(bin1[1]); 
    } 

    else if (data[2*j+2] < 0 && data[2*j+3] < 0) { 
     data[2*j] = (byte)(-data[2*j]); 
     data[2*j+1] = (byte)(-data[2*j+1]); 
     String unhx =(binary(data[2*j+1])+binary(data[2*j])); 
     float unbin = ((-1)*(float)unbinary(unhx)/100); 
     bin1[j/2] = unbin; 
     print(bin1[1]); 
     } 
     j = j + 2; 
    } 

现在的问题是,在每次新的包是它重写了整个BIN1阵列,我怎么能添加新的数据包到BIN1不能重写整个事情?

+2

注意 “产生的原因:java.lang.ArrayIndexOutOfBoundsException”。你需要解决这个问题。 – bmargulies

+0

使用DataInputStream而不是所有的位。 – EJP

回答

0

的一个问题是我在这里看到的是在你使用计数器作为变量int j=0while循环,但没有你在哪里递增的计数器变量j这可能是问题。

j = 0 ; 
while (j < data.length){ 
float[] array = new float[] {myData}; 
j++; 
} 
+0

我没有复制整个代码,我最后在某处增加它 –

+1

@melisazand:哦。我以为你犯了这个错误。你可以发布你的完整代码。 – amicngh

+0

我的问题是我怎么能保存数据... –

0

再次Melisa,你必须声明你的数组在你进入while循环之前。所以一旦你离开循环,他们将保持在范围内。这意味着,您在离开循环后仍然可以访问数组。 :)希望这会有所帮助。

+0

我更新了我的问题 –

0

回复您的问题编辑:

麦丽莎,你可能要考虑使用花车的列表,而不是float数组。 否则,您可能会发现自己调整大小并复制数组以添加更多数据。 理论上列表/链表的长度是无限的(你实际上不必考虑长度),你可以继续添加浮点数。

List

+0

谢谢,这可能是一个不错的选择,但我怎么能添加一个数组到数组列表? (array [0] = arraylist [0]) –