В чем разница между лимитом и пропускной способностью в Java java.nio.ByteBuffer?
В чем разница между лимитом и пропускной способностью в ByteBuffer?
Ответ 1
Лучше всего проиллюстрировано ЗДЕСЬ в этой статье: они в основном отличаются в зависимости от режима,
- В режиме записи емкость и лимит одинаковы.
- Но в режиме Чтение Предел означает предел того, сколько данных вы можете прочитать из данных.

Ответ 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