Срещнах проблем при изпращане на данни през TCP с персонализиран протокол, който разчита на познаването на дължината на данните, така че реших, че не мога да изпратя int, тъй като размерът на int може да бъде с различна дължина (int 10 има дължина от 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