Как использовать метод Wrap ByteBuffer в Java

Хорошо, поэтому я искал лучший способ преобразования массива байтов в его числовое значение в java, и я наткнулся на это ссылка. А во втором ответе упоминается использование класса ByteBuffer. Для тех, кто не хочет переходить по ссылке, изначально вопрос спрашивает, есть ли у меня:

byte[] by = new byte[8];

Как преобразовать это в int? Ну ответ идет...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();

System.out.println(l);

Результат

4

И это здорово учиться, но я просто хочу кое-что подтвердить, прежде чем идти по этому пути.

Скажем, у меня есть ранее прочитанный массив байтов длиной 8 байт.

byte[] oldByte = new byte[8];

тогда я делаю...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]});
int intValue = bb.getInt();

Будет ли это работать/читаться так же, как и в предыдущем примере?


person This 0ne Pr0grammer    schedule 03.07.2013    source источник
comment
Вы получите java.nio.BufferUnderflowException, потому что вам нужно 4 байта, чтобы иметь int, но вы даете только 2 байта ByteBuffer.   -  person Brinnis    schedule 03.07.2013


Ответы (1)


документация для класс ByteBuffer указывает, что метод getInt() считывает следующие четыре байта, поэтому, если вы передаете только два байта в вызов wrap, вы получите BufferUnderflowException:

Выдает: BufferUnderflowException — если в этом буфере осталось менее четырех байтов.

person andersschuller    schedule 03.07.2013
comment
Итак, вы говорите, что это должно быть: ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, oldByte[2], oldByte[3]});? - person This 0ne Pr0grammer; 03.07.2013
comment
@ This0nePr0grammer Да, согласно документам, порядок байтов по умолчанию — обратный порядок байтов, так что это выглядит правильно. - person andersschuller; 03.07.2013