Як перетворити 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);
}