MappedByteBuffer 对 2GIG 的 Java 限制使其难以用于映射大文件。通常推荐的方法是使用 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[])),则需要重写大量代码。
问题:对于这类场景,您的最佳实践是什么,您是否知道任何可以在不重新发明轮子的情况下重复使用的有效解决方案/代码?