通常可以说:如何为Java中大于2GB的内存映射文件实现方法byte[] get(offset, length)
。
有了上下文:
我正在尝试使用随机i / o高效读取大于2GB的文件。当然,我们的想法是使用Java nio和内存映射API。
问题在于内存映射限制为2GB。其中一个解决方案是映射多个2GB的页面并通过偏移量进行索引。
这里有一个类似的解决方案:
Binary search in a sorted (memory-mapped ?) file in Java
此解决方案的问题在于它设计为在我的API应该读取byte[]
时读取字节(因此我的API类似于read(offset, length)
)。
是否可以将最终的get()
更改为get(offset, length)
?当byte[]
我正在阅读两页之间时会发生什么?
答案 0 :(得分:4)
不,我对Binary search in a sorted (memory-mapped ?)的回答无法将get()
更改为get(offset, length)
因为内存映射文件数组边界,就像您怀疑的那样。我可以看到两种可能的解决方案: