2013-07-05 4 views
0

소켓을 기반으로하는 서버 - 클라이언트 통신 채널이 있습니다. 바이트에 [3] 정수 값을 채우고 OutputStream 소켓에 씁니다.하지만 다시 변환하는 방법은 무엇입니까? 코드의byte []를 Java의 int로 변환하는 방법

피스는 :

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로 감싸고 3 개의 getInt()를 수행하십시오. –

+0

OK, 아래 답변을 참조하십시오. – fge

답변

0

당신이 ByteBuffer 사용하는 경우,이 버퍼는 바이트 순서가 있습니다; 이 순서는 기본적으로 큰 엔디안입니다.

12 바이트 버퍼를 할당하고 3 개의 정수를 쓰십시오. 12 바이트입니다. 지금까지는 그렇게 좋았습니다.

ByteBuffer에 주문을 정의하지 않는다면 기본값은 빅 엔디안입니다. 그리고 빅 엔디안은 기본적으로 JVM이 모든 기본 유형에 사용하는 것입니다.

따라서, 귀하의 버퍼에 3의 int를 작성 한 후, 당신은 그들을 다시 읽을 수 있습니다

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

그래서 5,8,7 같은 3 int 값을 넣을 경우이 값 또는 정수를 역순으로 얻으려면 버퍼 되감기해야합니까? –

+0

'ByteBuffer'에'.put *()'을하면, 버퍼의 오프셋 (offset)를 변경합니다 (javadoc를 본다면 이것은 상대적인 put 연산입니다). 절대 put 연산도 있지만 'ByteBuffer'에 'int'연산은 없다. 최악의 경우, 새로운 것을 읽고 싶다면'final ByteBuffer newbuf = ByteBuffer.wrap (oldbuf.array());'를 읽고 다시 읽을 수 있습니다. – fge

관련 문제