我正在使用RandomAccessFile打开大文件(~200 MB),然后获取频道。我正在尝试将一些数据映射到MappedByteBuffer,但是我遇到了异常:
通道未打开以进行写入 - 无法将文件扩展为所需大小。
我不知道,为什么map方法尝试写入文件 - 映射区域小于文件大小!为什么在这种情况下它试图扩展文件?
更新
问题解决了,原来我认为第三个参数指示文件中的索引位置,它是缓冲区的长度。
来自文档:
参数:
position 映射区域要从哪个位置开始的文件内的位置;必须为非负数
size 要映射的区域的大小;必须为非负数且不大于 java.lang.Integer.MAX_VALUE
您的文件大小到底是多少?您是否正在尝试映射超过文件大小的偏移量+大小?