FileChannel#map
,用于映射文件(即启动内存映射),采用一个long
作为长度参数。
然而,关于文档FileChannel#map
的内容如下:
size - 要映射的区域的大小;必须为非负数且不大于 Integer.MAX_VALUE
首先,如果他们只允许高达 的值,为什么他们首先使用 long Integer.MAX_VALUE
?是否有可能一次映射比这更大的文件?
例如,如果我想映射一个 10GB 的文件,我想写这样的东西(InvalidArgumentException
由于长度太大而最终导致):
long length = 10_000_000_000;
MappedByteBuffer buffer = (new RandomAccessFile("./memory.map", "rw")).getChannel().map(FileChannel.MapMode.READ_WRITE, 0, length);
我是否必须为此创建连续的内存映射,例如,5 个内存映射,每个映射 2GB 给定文件?