Подтвердить что ты не робот

В чем разница между лимитом и пропускной способностью в ByteBuffer?

В чем разница между лимитом и пропускной способностью в Java java.nio.ByteBuffer?

4b9b3361

Ответ 1

Лучше всего проиллюстрировано ЗДЕСЬ в этой статье: они в основном отличаются в зависимости от режима,

  • В режиме записи емкость и лимит одинаковы.
  • Но в режиме Чтение Предел означает предел того, сколько данных вы можете прочитать из данных.

enter image description here

Ответ 2

ByteBuffer не имеет метода length(). Вместо этого он имеет несколько длинноподобных концепций:

mark <= position <= limit <= capacity

capacity= Внутри ByteBuffer имеется поддержка byte[] или что-то, что ведет себя как одно. Емкость - это его размер. Емкость индексирует первый слот за конец буфера.

limit= При заполнении буфера предел такой же, как и емкость. При опустошении буфера он заполняется последним заполненным байтом в буфере.

position= При заполнении буфера точка позиции находится за последним байтом, заполненным буфером. При опустошении буфера позиция указывает на последний байт, записанный из буфера.

mark Значок - это необязательная закладка, позволяющая записать интересное место в ByteBuffer, которое вы хотите вернуть позже. Когда вы берете mark(), он записывает текущую позицию, а когда вы вызываете reset(), он восстанавливает эту позицию.

Надеюсь, это поможет. Здесь также можно привести пример: http://mindprod.com/jgloss/bytebuffer.html

Источник: Ссылка на буфер Java Java - см. раздел "Инварианты".

Ответ 3

емкость - это максимальный размер буфера, который определяется при создании буфера и никогда не изменяется, ограничение - это фактический размер, который можно изменить. Вы не можете читать или писать без ограничений.

    ByteBuffer b= ByteBuffer.allocate(10); // capacity = 10, limit = 10
    b.limit(1);    //set limit to 1
    b.put((byte)1);
    b.put((byte)1); //causes java.nio.BufferOverflowException