9.1 连接两个字节数组的简单方法 | Java Debug 笔记

396 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:连接两个字节数组的简单方法

byte a[];
byte b[];

如何连接两个byte数组并将其存储在另一个byte数组中?

回答1:

最直接的方法


byte[] c = new byte[a.length + b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);

回答2:

最优雅的方法:

byte a[];
byte b[];

ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
outputStream.write( a );
outputStream.write( b );

byte c[] = outputStream.toByteArray( );

回答3:

另一种可能性是使用java.nio.ByteBuffer。

举个例子

byte a[];
byte b[];
byte c[];
ByteBuffer bb = ByteBuffer.allocate(a.length + b.length + c.length);
bb.put(a);
bb.put(b);
bb.put(c);
byte[] result = bb.array();

// or using method chaining:

byte[] result = ByteBuffer
        .allocate(a.length + b.length + c.length)
        .put(a).put(b).put(c)
        .array()

请注意,数组必须以适当的大小开始,因此需要分配容量。

回答4:

我编写了一个静态方法,如果您愿意可以将其设置为通用工具类的静态方法

byte[] concat(byte[]...arrays)
{
    // 确定结果数组的长度
    int totalLength = 0;
    for (int i = 0; i < arrays.length; i++)
    {
        totalLength += arrays[i].length;
    }

    // 创建结果数组
    byte[] result = new byte[totalLength];

    // 将输入的资源数组复制到结果数组中
    int currentIndex = 0;
    for (int i = 0; i < arrays.length; i++)
    {
        System.arraycopy(arrays[i], 0, result, currentIndex, arrays[i].length);
        currentIndex += arrays[i].length;
    }

    return result;
}

上述程序可以通过如下方式进行调用

byte[] a;
byte[] b;
byte[] result = concat(a, b);

它还适用于连接3、4、5个数组等。

byte[] a;
byte[] b;
byte[] c;
byte[] result = concat(a, b, c);