Емкость ByteBuffer ограничена Integer.MAX_VALUE, поэтому нет способа отобразить что-либо большее, чем это.
Посмотрите на: MappedByteBuffer map(MapMode mode, long position, long size)
position
должно быть длинным по очевидным причинам.size
необязательно быть длинным, но в любом расчете его нужно продвигать - например, позиция + размер должны быть положительным длинным.Операция отображения ОС действительно может использовать long
для переноса отображения, функция map
(mmap) может потребоваться отобразить больше, чем Integer.MAX_VALUE, чтобы сохранить размер страницы, но ByteBuffer просто не может использовать это.
В целом int
лежит очень глубоко в дизайне Java, и не существует типа size_t
C, масса, использующая long
вместо int, снизит производительность.Итак, в конце: если вам нужны карты большего размера, чем 2 ГБ, просто используйте более одного ByteBuffer.