将几个字节数组复制到一个大字节数组

Dam*_*mir 35 java arrays

我有一个大byte[]数组和很多小byte数组(大数组的长度是长数组的小数组).是否有一些快速方法可以将一个数组从开始位置复制到另一个数组,而不是手动为每个字节使用for循环?

jos*_*efx 60

你可以使用ByteBuffer.

ByteBuffer target = ByteBuffer.wrap(bigByteArray);
target.put(small1);
target.put(small2);
...;
Run Code Online (Sandbox Code Playgroud)

  • @ Zom-B问题的开头是"我有一个大字节数组",所以看起来数组的大小事先已知. (2认同)

Joa*_*uer 22

使用System.arraycopy().

您也可以应用我之前的答案中的解决方案.请注意,对于基本类型,例如,byte您必须生成单独的版本(每种基本类型一个),因为泛型在那里不起作用.


Ian*_*nes 13

或者您可以使用a ByteArrayOutputStream(虽然它会为您创建结果数组,而不是像您要求的那样复制到现有数组中).

public byte[] concatenateByteArrays(List<byte[]> blocks) {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    for (byte[] b : blocks) {
        os.write(b, 0, b.length);
    }
    return os.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*oyd 6

样本实施

public static void copySmallArraysToBigArray(final byte[][] smallArrays,
    final byte[] bigArray){
    int currentOffset = 0;
    for(final byte[] currentArray : smallArrays){
        System.arraycopy(
            currentArray, 0,
            bigArray, currentOffset,
            currentArray.length
        );
        currentOffset += currentArray.length;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试代码

public static void main(final String[] args){
    final byte[][] smallArrays =
        {
           "The"    .getBytes(),
           " Quick" .getBytes(),
           " Brown" .getBytes(),
           " Fox"   .getBytes()
        };
    final byte[] bigArray = "The Small Mauve Cat".getBytes();
    copySmallArraysToBigArray(smallArrays, bigArray);
    System.out.println(new String(bigArray));
}
Run Code Online (Sandbox Code Playgroud)

输出:

快速布朗福克斯