如何转换byte[]
到Byte[]
,也Byte[]
给byte[]
,在不使用任何第三方库的情况下?
有没有一种方法可以仅使用标准库来快速完成?
如何转换byte[]
到Byte[]
,也Byte[]
给byte[]
,在不使用任何第三方库的情况下?
有没有一种方法可以仅使用标准库来快速完成?
Byte[]
?似乎不是一个好主意...使用byte[]
或List<Byte>
。
Byte[]
,byte[]
如果您具有空引用,则不能将a转换为a
Answers:
Byte
class是基元的包装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();
Byte.valueOf(b)
过来new Byte(b)
。如果Byte类没有为字节缓存每个单个值,我会感到惊讶。
Byte.valueOf(byte)
。JavaDocs表示,通常应优先于构造方法使用Byte(byte)
此方法,因为由于所有字节值都已缓存,因此该方法可能会产生明显更好的空间和时间性能。
byteObjects[i++] = b;
new Byte[bytes.length];
而不是new Byte[10];
保持理智。
byte []至Byte []:
byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);
Byte []至byte []:
Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);
您可以在Apache Commons lang库ArrayUtils类中使用toPrimitive方法,如此处所建议-Java-Byte [] to byte []
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;
}
如果有人喜欢Stream API而不是普通循环。
private Byte[] toObjects(byte[] bytes) {
return IntStream.range(0, bytes.length)
.mapToObj(i -> bytes[i])
.toArray(Byte[]::new);
}