Я столкнулся с проблемой при отправке данных по TCP с помощью специального протокола, который зависит от знания длины данных, поэтому я решил, что не могу отправить целое число из-за того, что размер целого числа может быть разной длины (целое число 10 имеет длину of 2, тогда как int 100 имеет длину 3), поэтому я решил вместо этого отправить 4-байтовое представление int и, таким образом, наткнулся на ByteBuffer.
В следующем примере я получаю исключение BufferUnderflowException.
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()
и друзей. - person user207421   schedule 20.09.2014