ByteBuffer причинява изключение при препълване

Срещнах проблем при изпращане на данни през 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();
}

person user3045798    schedule 20.09.2014    source източник
comment
Пропуснахте flip(), но изглежда доста безсмислено. Изхвърлете всичко и използвайте DataOutputStream.writeInt() и приятели.   -  person user207421    schedule 20.09.2014


Отговори (1)


Трябва да зададете начален индекс или буфер за пренавиване;

int recieve = ByteBuffer.allocate(4).put(bytes).getInt(0);
person Petar Butkovic    schedule 20.09.2014