gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:37 25 4
gpt4 key购买 nike

可以笼统地说:你如何实现一个方法byte[] get(offset, length)对于 Java 中大于 2GB 的内存映射文件。

有上下文:

我正在尝试使用随机 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[] 时会发生什么?我正在阅读两页之间的内容?

最佳答案

不,我对Binary search in a sorted (memory-mapped ?)的回答将 get() 更改为 get(offset, length) 是行不通的,因为内存映射文件数组边界,正如您怀疑的那样。我可以看到两种可能的解决方案:

  1. 重叠内存映射文件。读取时,选择起始字节紧接在读取起始字节之前的内存映射文件。此方法不适用于大于最大内存映射大小 50% 的读取。
  2. 创建一个字节数组创建方法,该方法从两个不同的两个不同的内存映射文件中读取。我不喜欢这种方法,因为我认为一些性能提升将会丢失,因为生成的数组不会进行内存映射。

关于java - 使用 Java 映射大于 2GB 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com