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

时间:2011-01-28 11:19:31

标签: java arrays

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

5 个答案:

答案 0 :(得分:59)

您可以使用ByteBuffer

ByteBuffer target = ByteBuffer.wrap(bigByteArray);
target.put(small1);
target.put(small2);
...;

答案 1 :(得分:22)

使用System.arraycopy()

您还可以应用a previous answer of mine中的解决方案。请注意,对于诸如byte之类的基本类型,您必须生成单独的版本(每种基本类型一个版本),因为泛型在那里不起作用。

答案 2 :(得分:13)

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

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

答案 3 :(得分: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;
    }
}

测试代码

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));
}

<强>输出:

  

快速布朗狐狸

答案 4 :(得分:2)

这是另一个也使用ByteBuffer的解决方案:

public static byte[] toByteArray(List<byte[]> bytesList)
{
    int size = 0;

    for (byte[] bytes : bytesList)
    {
        size += bytes.length;
    }

    ByteBuffer byteBuffer = ByteBuffer.allocate(size);

    for (byte[] bytes : bytesList)
    {
        byteBuffer.put(bytes);
    }

    return byteBuffer.array();
}