使用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[]
我在阅读两页之间时会发生什么?
没有找到相关结果
已邀请:
1 个回复
邦绊门蔽惩
到
,就像你怀疑的那样。我可以看到两种可能的解决方案 重叠内存映射文件。执行读操作时,请在读取的起始字节之前使用起始字节选择内存映射文件。对于大于最大内存映射大小50%的读取,此方法不起作用。 创建一个字节数组创建方法,从两个不同的两个不同的内存映射文件中读取。我并不热衷于这种方法,因为我认为一些性能提升将会丢失,因为生成的数组不会被内存映射。