2015-06-20 3 views
2

При изучении ByteBuffer класса я начал думать о массиве завернутых ByteBuffer, которые могут быть построены следующим образом:Что такое начальный «режим» ByteBuffer?

byte data[] = new byte[10]; 
// Populate data array 
ByteBuffer myBuffer = ByteBuffer.wrap(data); 
int i = myBuffer.getInt(); 

Что, я думал, может получить первый 4 байта моего байтового массива как целочисленное значение. Однако по мере того, как я изучал дальше, мне показалось, что у ByteBuffer есть два режима, которые считываются и записываются, и между ними можно использовать , используя метод flip(). Однако, поскольку flip в основном является переключателем, он предполагает, что он знает, что первоначальное значение значительно перевернулось между состояниями чтения и записи.

Каково определение начального состояния ByteBuffer?

  • пишите?
  • читать?
  • Функция того, как она была создана (например, allocate vs wrap)?

ответ

3

Строго говоря, сам ByteBuffer не отслеживает, является ли оно «прочитанным» или «писать»; это просто функция того, как он используется. ByteBuffer может читать и писать в любое время. Причина, по которой мы говорим, что флип переключает «режим», состоит в том, что он является частью общей задачи записи в буфер, перевертывания его, а затем чтения из буфера.

Действительно, как выделение, так и перенос устанавливают предел и емкость равными размеру массива, а положение - нулю. Это означает, что операции чтения могут считывать весь массив, а операции записи могут заполнять весь массив. Таким образом, вы можете читать или писать с помощью недавно выделенного или завернутого ByteBuffer.

Смежные вопросы