RandomAccessFile 中的位置类型为 long,但 MappedByteBuffer 中的位置类型为 int

问题描述 投票:0回答:1

Java 中的

RandomAccessFile
类在方法
long
getFilePointer()
length()
seek()
中使用类型
setLength()

但是,如果我想通过

MappedByteBuffer
操作这个文件,我只能将
Buffer
的位置指定为
int

这是 JDK 的特性还是 API 的缺点? (很可能是前者,但不确定为什么。)

将文件指针从

long
向下转换为
int
Buffer
位置是唯一的方法吗?

java nio randomaccessfile mappedbytebuffer
1个回答
1
投票

创建映射的 FileChannel.map 调用有

long size
但 Javadoc 说:

待映射区域的大小;必须是非负数并且没有 大于 Integer.MAX_VALUE

因此

int
值足以设置地图内的位置。

对于 Java 22 及以上版本,外部函数和内存支持添加了

FileChannel.map
的替代版本,它返回没有大小限制的
MemorySegment

© www.soinside.com 2019 - 2024. All rights reserved.