2013-07-05 2 views
0

У меня есть канал связи клиент-сервер, основанный на сокетах. Я упаковал 3 целочисленного значения в байт [] и записал его в socket OutputStream, но как его преобразовать?Как преобразовать byte [] в int в Java

Пиз кода:

ByteBuffer b = ByteBuffer.allocate(12); 
    b.putInt(BTActions.READY_FOR_GAME); 
    b.putInt(i); 
    b.putInt(l); 

    try 
    { 
     mAcceptThread.getWriteSocket().write(b.array()); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
+0

Что вы имеете в виду, «преобразовать его обратно»? – fge

+0

Как и чтение в 12 байтах, оберните его ByteBuffer и сделайте три getInt(). –

+0

ОК, см. Ответ ниже. – fge

ответ

0

Если вы используете ByteBuffer, этот буфер имеет порядок байтов; и этот порядок по умолчанию является большим по умолчанию.

Вы выделяете 12-байтовый буфер и записываете ему 3 типа; это 12 байт, пока что так хорошо.

С учетом того, что вы не определяете заказ ByteBuffer, по умолчанию используется большой endian. И большой endian - это то, что по умолчанию использует JVM для всех примитивных типов.

Таким образом, после того, как написал 3 Интс в буфере, вы можете прочитать их обратно, как:

final int i1, i2, i3; 
buffer.rewind(); 
i1 = buffer.getInt(); 
i2 = buffer.getInt(); 
i3 = buffer.getInt(); 
+0

Итак, если я ставлю 3 значения int, например 5,8,7, я должен перемотать буфер, чтобы получить это значение или целые числа в обратном порядке? –

+0

Когда вы '.put *()' в 'ByteBuffer', вы меняете смещение буфера (если вы посмотрите на javadoc, это относительная операция put). Существуют также операции с абсолютным положением, но такой операции для 'int' на' ByteBuffer' нет. В худшем случае, вы хотите прочитать заново, вы всегда можете сделать 'final ByteBuffer newbuf = ByteBuffer.wrap (oldbuf.array());' и прочитать назад – fge

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