Ограничение Java для MappedByteBuffer до 2GIG усложняет использование для отображения больших файлов.Обычный рекомендуемый подход - использовать массив MappedByteBuffer и индексировать его через:
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));
}
. Это может работать для отдельных байтов, но требует переписывания большого количества кода, если вы хотите обрабатывать операции чтения / записи, которыебольше и требуют пересечения границ (getLong () или get (byte [])).
Вопрос: какова ваша лучшая практика для подобных сценариев, знаете ли вы какое-либо работающее решение / код, который может бытьповторно использовать без повторного изобретения колеса?