Один довольно распространенный вариант использования ByteBuffer
- это построение некоторой структуры данных по частям, а затем запись всей этой структуры на диск. flip
используется для переключения ByteBuffer
от «чтения из ввода / вывода» ( put
ting) к «записи в ввод / вывод» ( get
ting): после того, как последовательность put
s используется для заполнения ByteBuffer
, flip
устанавливает предел буфера в текущую позицию и сбросьте позицию на ноль. Это приводит к тому, что будущее 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);
}