Як перетворити byte[]
на, Byte[]
а також Byte[]
у byte[]
, у разі використання не будь-якої сторонньої бібліотеки?
Чи є спосіб зробити це швидко, просто використовуючи стандартну бібліотеку?
Як перетворити byte[]
на, Byte[]
а також Byte[]
у byte[]
, у разі використання не будь-якої сторонньої бібліотеки?
Чи є спосіб зробити це швидко, просто використовуючи стандартну бібліотеку?
Byte[]
? Це не здається хорошою ідеєю ... або використовувати, byte[]
або List<Byte>
.
Byte[]
на a, byte[]
якщо у вас є нульові посилання ...
Відповіді:
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();
Byte.valueOf(b)
більше new Byte(b)
. Я був би здивований, якби клас Byte не кешував кожне значення байта.
Byte.valueOf(byte)
. JavaDocs заявляє, що цей метод, як правило, слід використовувати переважно перед конструктором Byte(byte)
, оскільки цей метод, ймовірно, дасть значно кращу продуктивність у просторі та часі, оскільки всі значення байтів кешуються.
byteObjects[i++] = b;
new Byte[bytes.length];
замість того, new Byte[10];
щоб тримати це розумно.
байт [] до байт []:
byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);
Байт [] в байт []:
Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);
Рішення Java 8:
Byte[] toObjects(byte[] bytesPrim) {
Byte[] bytes = new Byte[bytesPrim.length];
Arrays.setAll(bytes, n -> bytesPrim[n]);
return bytes;
}
На жаль, ви не можете зробити це для перетворення з Byte[]
на byte[]
. Arrays
має setAll
для double[]
,, int[]
і long[]
, але не для інших примітивних типів.
Ви можете використовувати метод toPrimitive у класі бібліотеки Apache Commons ArrayUtils, як запропоновано тут - Java - Byte [] до 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;
}
З байта [] в байт []:
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]);
}
Від байта [] до байта [] (використовуючи наші раніше визначені B
):
byte[] b2 = new byte[B.length];
for (int i = 0; i < B.length; i++)
{
b2[i] = B[i];
}
Якщо хтось віддає перевагу Stream API перед звичайними циклами.
private Byte[] toObjects(byte[] bytes) {
return IntStream.range(0, bytes.length)
.mapToObj(i -> bytes[i])
.toArray(Byte[]::new);
}