Один довольно распространенный вариант использования ByteBuffer- это построение некоторой структуры данных по частям, а затем запись всей этой структуры на диск. flipиспользуется для переключения ByteBufferот «чтения из ввода / вывода» ( putting) к «записи в ввод / вывод» ( getting): после того, как последовательность puts используется для заполнения 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);
}