如果在执行FileChannel.map()时MappedByteBuffer的大小超过文件长度会发生什么

时间:2012-06-30 04:57:40

标签: java memory-mapped-files

我正在尝试将randomaccessfile映射到内存,然后想要附加一些数据。     MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, size);

size > file.length

会发生什么?

3 个答案:

答案 0 :(得分:1)

这个问题的答案在Javadoc中:

  

当请求的区域不是时,此方法的行为   完全包含在此频道的文件中是未指定的。

答案 1 :(得分:0)

你可以试试但是......

如果内存映射的结尾超出了文件的现有末尾,则会增大文件的大小。

如果您无法以READ_WRITE身份访问该文件,则无论大小如何都会出现异常。

答案 2 :(得分:0)

我在Mac上运行Java 8,它引发了java.io.IOException: Channel not open for writing - cannot extend file to required size

如果没有特别的理由分配超过文件大小,您可以随时使用三元组快速选择较小的文件大小。