Java,如何从字节数组中获取字节集合

时间:2016-04-02 00:04:21

标签: java byte bytearray

这个问题可能看起来很独特,但我在解决它时遇到了困难。

我有一个字节数组(每行一个DW)并尝试获取每9个字节的字节值。 以下是字节数组的样子:

0   1   2   3
4   5   6   7
8|  9   10  11
12  13  14  15
16  17| 18  19
20  21  22  23
24  25  26| 27
28  29  30  31
32  33  34  35|
.......

这是我需要用来从上述专利中获取值的定义函数:

getValue(int DWOffset, int highBit, int lowBit)

//DWOffset indicates the row of the data.
//highBit indicates the ending bit
//lowBit indicates the starting bit

我的问题是如何通过使用for循环从数据(出现的地方)获取每9个字节?可以使用

找到数据长度
data.getLength();    //which returns the total number of bytes in the data

到目前为止,我可以获得前两行的价值:

for(int i = 0; i < data.getLength()/(4*2); i++){
    getValue(i*2, 31, 0);         //DW i
    getValue(i*2 + 1, 31, 0);     //DW i+1
} 

1 个答案:

答案 0 :(得分:0)

问题的一部分在于你似乎在混合范式,从概念上将其视为二维和一维数组。将其视为二维,您需要一个返回单个字节的getValue(int row,int column)。然后你可以做这样的事情:

final int TOTAL_BYTES_TO_INCLUDE = 9;

byte[] byteArray[] = new byte[TOTAL_BYTES_TO_INCLUDE];
int arrayIndex = 0;


for (int r = 0; r++; r < number_of_rows) {
  for (int c = 0; c++; c < 4) {
     byteArray[arrayIndex++] = getValue(r, c);
     if (arrayIndex >= TOTAL_BYTES_TO_INCLUDE) {
        ... do something with your byte array ...
        arrayIndex = 0;
     }
   }
}

有一些极端情况需要处理,比如如果可用值的数量不是9的倍数会发生什么,会发生什么。如果读入的值导致字节溢出会发生什么。我不会在每次迭代之前重新初始化数组,但是留下一些东西会有任何风险。