Um caso de uso bastante comum para o ByteBufferé construir alguma estrutura de dados peça por peça e, em seguida, gravar essa estrutura inteira no disco. flipé usado para mudar ByteBufferde "leitura de I / O" ( putting) para "gravação de I / O" ( getting): após uma sequência de puts ser usada para preencher o ByteBuffer, flipdefinirá o limite do buffer para a posição atual e redefinir a posição para zero. Isso tem o efeito de fazer um futuro getou writedo buffer gravar tudo o que estava putno buffer e nada mais.
Depois de terminar o put, você pode querer reutilizar o ByteBufferpara construir outra estrutura de dados. Para "desviá-lo", ligue clear. Isso redefine o limite da capacidade (tornando todo o buffer utilizável) e a posição para 0.
Portanto, um cenário de uso típico:
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);
}