Java MemoryMapping arquivos grandes
A limitação do Java de MappedByteBuffer para 2GIG torna difícil o uso para o mapeamento de arquivos grandes. A abordagem usual recomendada é usar uma matriz de MappedByteBuffer e indexá-la atravé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));
}
isso pode funcionar para bytes únicos, mas requer reescrever muito código, se você quiser manipular leituras / gravações maiores e exigir que ultrapassem os limites (getLong () ou get (byte [])
A pergunta: qual é a sua melhor prática para esse tipo de cenário, você conhece alguma solução / código de trabalho que possa ser reutilizado sem reinventar a roda?