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