如何将byte []转换为Byte [],反之亦然?

时间:2012-10-17 22:27:54

标签: java arrays byte boxing

如果不使用任何第三方库,如何将byte []转换为Byte [],还将Byte []转换为byte []?有没有办法快速使用标准库?

7 个答案:

答案 0 :(得分:40)

Byte类是原始byte包装。这应该做的工作:

byte[] bytes = new byte[10];
Byte[] byteObjects = new Byte[bytes.length];

int i=0;    
// Associating Byte array values with bytes. (byte[] to Byte[])
for(byte b: bytes)
   byteObjects[i++] = b;  // Autoboxing.

....

int j=0;
// Unboxing Byte values. (Byte[] to byte[])
for(Byte b: byteObjects)
    bytes[j++] = b.byteValue();

答案 1 :(得分:35)

byte []到字节[]:

byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);

Byte []到byte []:

Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);

答案 2 :(得分:14)

您可以在Apache Commons lang库ArrayUtils类中使用toPrimitive方法, 正如此处所建议的那样 - Java - Byte[] to byte[]

答案 3 :(得分:13)

Java 8解决方案:

Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    Arrays.setAll(bytes, n -> bytesPrim[n]);
    return bytes;
}

很遗憾,您无法将Byte[]转换为byte[]Arrays setAlldouble[]int[]long[],但其他原始类型则不然。

答案 4 :(得分:4)

从byte []到Byte []:

    byte[] b = new byte[]{1,2};
    Byte[] B = new Byte[b.length];
    for (int i = 0; i < b.length; i++)
    {
        B[i] = Byte.valueOf(b[i]);
    }

从Byte []到byte [](使用我们之前定义的B):

    byte[] b2 = new byte[B.length];
    for (int i = 0; i < B.length; i++)
    {
        b2[i] = B[i];
    }

答案 5 :(得分:4)

byte[] toPrimitives(Byte[] oBytes)
{

    byte[] bytes = new byte[oBytes.length];
    for(int i = 0; i < oBytes.length; i++){
        bytes[i] = oBytes[i];
    }
    return bytes;

}

逆:

//byte[] to Byte[]
Byte[] toObjects(byte[] bytesPrim) {

    Byte[] bytes = new Byte[bytesPrim.length];
    int i = 0;
    for (byte b : bytesPrim) bytes[i++] = b; //Autoboxing
    return bytes;

}

答案 6 :(得分:1)

如果有人喜欢Stream API而不是普通循环。

private Byte[] toObjects(byte[] bytes) {
    return IntStream.range(0, bytes.length)
            .mapToObj(i -> bytes[i])
            .toArray(Byte[]::new);
}