Ответ 1
Один довольно распространенный вариант использования для ByteBuffer
- это построение некоторой структуры данных по частям, а затем запись всей структуры на диск. flip
используется для перевода ByteBuffer
с "чтения с ввода-вывода" (put
ting) на "запись в I/O" (get
ting): после того, как последовательность put
используется для заполните ByteBuffer
, flip
установите предел буфера на текущую позицию и reset позицию на ноль. Это приводит к тому, что из буфера будущие get
или write
пишут все, что было put
, в буфер и не более.
После завершения put
вы можете повторно использовать ByteBuffer
для построения другой структуры данных. Чтобы "разблокировать" его, вызовите clear
. Это сбрасывает ограничение на емкость (делая весь используемый буфер), а положение равно 0.
Итак, типичный сценарий использования:
ByteBuffer b = new ByteBuffer(1024);
for(int i=0; i<N; i++) {
b.clear();
b.put(header[i]);
b.put(data[i]);
b.flip();
out.write(b);
}