Java MemoryMapping archivos grandes

La limitación de Java de MappedByteBuffer a 2GIG hace que sea difícil de usar para mapear archivos grandes. El enfoque recomendado habitual es utilizar una matriz de MappedByteBuffer e indexarlo a través de:

long PAGE_SIZE = Integer.MAX_VALUE;
MappedByteBuffer[] buffers;

private int getPage(long offset) {
    return (int) (offset / PAGE_SIZE)
}

private int getIndex(long offset) {
    return (int) (offset % PAGE_SIZE);
}

public byte get(long offset) {
    return buffers[getPage(offset)].get(getIndex(offset));
}

esto puede funcionar para bytes individuales, pero requiere reescribir una gran cantidad de código si desea manejar lecturas / escrituras que son más grandes y requieren cruzar límites (getLong () o get (byte [])).

La pregunta: ¿cuál es su mejor práctica para este tipo de escenarios? ¿Conoce alguna solución / código de trabajo que pueda reutilizarse sin reinventar la rueda?

Respuestas a la pregunta(1)

Su respuesta a la pregunta