2014-09-20 4 views
1

데이터의 길이를 알고있는 사용자 지정 프로토콜을 사용하여 TCP를 통해 데이터를 보낼 때 문제가 발생했습니다. 그래서 int 크기로 인해 int를 보낼 수 없다고 결정했습니다. 길이가 다를 수 있습니다. (int 10의 길이는 2이지만 int 100의 길이는 3입니다.) 그래서 대신 int의 4 바이트 표현을 보내고 ByteBuffer를 보았습니다. 내가ByteBuffer 언더 플로 예외가 발생했습니다

try 
{ 
    int send = 2147483642; 
    byte[] bytes = ByteBuffer.allocate(4).putInt(send).array(); // gets [127, -1, -1, -6] 
    int recieve = ByteBuffer.allocate(4).put(bytes).getInt(); // expected 2147483642; throws BufferUnderflowException 
    if (send == recieve) 
    { 
     System.out.println("WOOHOO"); 
    } 
} 
catch (BufferUnderflowException bufe) 
{ 
    bufe.printStackTrace(); 
} 
+0

'flip()'을 생략했지만 꽤 무의미한 것처럼 보입니다. 그것을 모두 버리고'DataOutputStream.writeInt()'와 친구들을 사용하십시오. – EJP

답변

2

당신은 인덱스 또는 되감기 버퍼를 시작 설정해야 BufferUnderflowException을을 얻을 다음의 예와

;

int recieve = ByteBuffer.allocate(4).put(bytes).getInt(0);