在Java中将多个Byte []添加到一个数组中

时间:2013-06-02 01:30:33

标签: java android

我在尝试将多个字节数组添加到一个时遇到问题。我不是在谈论在这里连接。我需要添加Byte []的各个项目。这就是我要找的。

    byte[] one = [4,5,6];
    byte[] two = [1,2,1];

结果应为

    byte[] sum = [5,7,7];

这只是一个简单的例子。我正在编写自己的算法,在android中混合不同的pcm录音。这是我被困在的地方。任何帮助将非常感激。

更新:

这是我的代码段:

while(stream[1].read()!=-1) {   
List<byte[]> arrayColl = new ArrayList<byte[]>();
for(int i =0; i<recfiles.length; i++) {
stream[i].read(buffer);
arrayColl.add(buffer);
}
}

根据用户选择可以有多个流。上面的循环将读取缓冲区中的多个流,并将该缓冲区添加到ArrayList。现在我需要做的是以上面提到的方式混合arraylist中的字节。 bufferbyte[]

2 个答案:

答案 0 :(得分:1)

要添加多个字节数组,需要遍历每个数组,将结果添加到累加器数组中:

public byte[] sum(byte[]... arrays) {
    // optional: check that arrays.length > 0 (at least one array was passed)
    final int len = arrays[0].length;
    final byte[] result = new byte[len];
    for (byte[] array : arrays) {
        // optional: test that array has length len
        for (int i = 0; i < len; ++i) {
            result[i] += array[i];
        }
    }
    return result;
}

答案 1 :(得分:0)

您正在寻找的是一个简单的matrix addition。您可以使用for循环完成此操作,方法是迭代循环的下标运算符的域(即,从0到数组的长度),如下所示:

int length = Math.min(one.length, two.length);
byte[] sum = new byte[length];
for (int i = 0; i<length; i++) {
    sum[i] = one[i] + two[i];
}

或者,如果要确保两个数组的大小相同,可以使用:

if (one.length != two.length) {
    throw new IllegalArgumentException("unequal lengths");
}
int length = one.length; // or two.length
byte[] sum = new byte[length];
for (int i = 0; i<length; i++) {
    sum[i] = one[i] + two[i];
}