我正在尝试将 randomaccessfile 映射到内存,然后想要附加一些数据。
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, size);
如果 ?会发生什么size > file.length
?
我正在尝试将 randomaccessfile 映射到内存,然后想要附加一些数据。
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, size);
如果 ?会发生什么size > file.length
?
这个问题的答案在 Javadoc 中:
当请求的区域未完全包含在此通道的文件中时,此方法的行为未指定。
你可以试试但是..
如果内存映射的结尾超出文件的现有结尾,它将增大文件。
如果您无法以 READ_WRITE 身份访问该文件,则无论大小如何,您都会收到异常。
我在 Mac 上运行 Java 8,它引发了java.io.IOException: Channel not open for writing - cannot extend file to required size
.
如果没有特别的理由分配超过文件大小,您总是可以使用三元来快速选择较小的。