В чем разница между лимитом и пропускной способностью в 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