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[]))的读/写,则需要重写大量代码。
问题是:在这些情况下,您的最佳实践是什么?您是否知道任何可重复使用的工作解决方案/代码,而无需重新发明轮子?