2013-07-03 20 views
5

Ok, więc szukałem, jaki jest najlepszy sposób konwersji z tablicy bajtów na jej wartość numeryczną w java i natknąłem się na to link. Druga odpowiedź wspomina o używaniu klasy ByteBuffer. Dla tych, którzy nie chcą, aby kliknąć na link, pierwotnie pytanie pyta, czy mam:Jak używać metody Wrap ByteBuffer w Javie

byte[] by = new byte[8]; 

jaki sposób można przekonwertować na int? Oraz odpowiedź idzie ...

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

System.out.println(l); 

Wynik

4 

I to jest niesamowite, aby dowiedzieć się, ale po prostu chcę potwierdzić coś przed pójściem tą drogą.

Powiedz, że mam wcześniej przeczytaną tablicę bajtów o długości 8 bajtów.

byte[] oldByte = new byte[8]; 

następnie zrobić ...

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

Will że praca/odczytywać w taki sam sposób jak w poprzednim przykładzie?

+0

Otrzymasz wyjątek java.nio.BufferUnderflowException, ponieważ potrzebujesz 4 bajtów na int, ale dajesz tylko bajt ByteBuffer 2. – Brinnis

Odpowiedz

6

documentation dla klasy ByteBuffer określa, że ​​metoda getInt() odczytuje kolejne cztery bajtów, więc jeśli jesteś przejazdem tylko dwa bajty na wezwanie do wrap, dostaniesz BufferUnderflowException:

Zgłasza : BufferUnderflowException - Jeśli pozostało mniej niż cztery bajty w tym buforze, to

+0

Więc mówisz, że powinno to być: 'ByteBuffer bb = ByteBuffer.wrap (nowy bajt [] {0, 0, oldByte [2], oldByte [3]});'? –

+1

@ This0nePr0grammer Tak, zgodnie z dokumentami domyślną kolejnością bajtów jest big endian, więc wygląda to poprawnie. – andersschuller