Каков начальный "режим" ByteBuffer?
Изучая класс ByteBuffer, я подумал о массиве ByteBuffer, который может быть построен следующим образом:
byte data[] = new byte[10];
// Populate data array
ByteBuffer myBuffer = ByteBuffer.wrap(data);
int i = myBuffer.getInt();
Который, я думал, мог бы извлечь первые 4 байта моего байтового массива как значение типа int. Однако, как я изучал дальше, мне показалось, что ByteBuffer имеет два режима чтения и записи, и мы можем переключаться между ними, используя flip()
метод. Тем не менее, поскольку переворот в основном является переключателем, он предполагает, что начальное значение превышает одно, чтобы осмысленно переключаться между состояниями чтения и записи.
Каково определение начального состояния ByteBuffer?
- записывать?
- читать?
- Функция того, как он был создан (например, allocate vs wrap)?
1 ответ
Строго говоря, сам ByteBuffer не отслеживает, является ли он "прочитанным" или "записанным"; это просто функция того, как это используется. ByteBuffer может читать и писать в любое время. Причина, по которой мы говорим, что flip переключает "режим", заключается в том, что это является частью общей задачи записи в буфер, переворачивания, а затем чтения из буфера.
Действительно, и allocate, и wrap устанавливают ограничение и емкость, равные размеру массива и позиции на ноль. Это означает, что операции чтения могут считывать весь массив, а операции записи могут заполнять весь массив. Поэтому вы можете либо читать, либо писать с помощью недавно выделенного или упакованного ByteBuffer.