File Channel lee / agrega datos incorrectos

Estoy usando un canal de archivos con un búfer de bytes para enviar paquetes a través de la red. Mi problema es que cuando el canal de archivos lee los últimos bytes, agrega el último bit de datos de los bytes anteriores leídos, aunque estoy borrando el búfer de bytes después de escribir.

Por ejemplo,

Byte Buffer size = 512 Para la última iteración, los bytes restantes para enviar son 372. Lee los últimos 372 pero también agrega otros 140 bytes (512-372) al final, y parece que los últimos 140 bytes son del 512 bytes anteriores enviados.

Aquí está mi código:

ByteBuffer bBuffer = ByteBuffer.allocate(512);

while (fChannel.read(bBuffer) > 0) {

    bBuffer.flip();
    datagramChannel.write(bBuffer);
    bBuffer.clear();

    //omitted code
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta