2013-07-03 20 views
5

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

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(); 

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

+0

Вы получите java.nio.BufferUnderflowException, потому что вам нужно 4 байта, чтобы иметь int, но вы только даете ByteBuffer - 2 байта. – Brinnis

ответ

6

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

Броски : BufferUnderflowException - Если в этом буфере осталось меньше четырех байтов

+0

Итак, вы говорите, что это должно быть: 'ByteBuffer bb = ByteBuffer.wrap (новый байт [] {0, 0, oldByte [2], oldByte [3]});'? –

+1

@ This0nePr0grammer Да, в соответствии с документами порядок байтов по умолчанию большой эндиан, так что выглядит правильно. – andersschuller

Смежные вопросы