使用Java映射大于2GB的文件

通常可以说:如何为Java中大于2GB的内存映射文件实现方法
byte[] get(offset, length)
。 有了上下文: 我正在尝试使用随机i / o高效读取大于2GB的文件。当然,这个想法是使用Java nio和内存映射API。 问题是内存映射限制为2GB。其中一个解决方案是映射多个2GB的页面并通过偏移量进行索引。 这里有一个类似的解决方案: 在Java中的已排序(内存映射?)文件中进行二进制搜索 这个解决方案的问题在于它设计为在我的API应该读取
byte[]
时读取字节(因此我的API将类似于
read(offset, length)
)。 是否可以将最终的
get()
改为
get(offset, length)
?当
byte[]
我在阅读两页之间时会发生什么?     
已邀请:
不,我对排序(内存映射?)中二进制搜索的答案不会因为内存映射文件数组边界而改变
get()
get(offset, length)
,就像你怀疑的那样。我可以看到两种可能的解决方案 重叠内存映射文件。执行读操作时,请在读取的起始字节之前使用起始字节选择内存映射文件。对于大于最大内存映射大小50%的读取,此方法不起作用。 创建一个字节数组创建方法,从两个不同的两个不同的内存映射文件中读取。我并不热衷于这种方法,因为我认为一些性能提升将会丢失,因为生成的数组不会被内存映射。     

要回复问题请先登录注册