将此通道的文件区域直接映射到内存中。
可以通过下列三种模式将文件区域映射到内存中:
只读: 试图修改得到的缓冲区将导致抛出 readonlybufferexception
。(mapmode.read_only
)
读/写: 对得到的缓冲区的更改最终将传播到文件;该更改对映射到同一文件的其他程序不一定是可见的。 (mapmode.read_write
)
专用: 对得到的缓冲区的更改不会传播到文件,并且该更改对映射到同一文件的其他程序也不是可见的;相反,会创建缓冲区已修改部分的专用副本。 (mapmode.private
)
对于只读映射关系,此通道必须可以进行读取操作;对于读取/写入或专用映射关系,此通道必须可以进行读取和写入操作。
此方法返回的
已映射字节缓冲区
具有的位置为零,限制和容量为 size;其标记是不确定的。在缓冲区本身被作为垃圾回收之前,该缓冲区及其表示的映射关系都是有效的。
映射关系一经创建,就不再依赖于创建它时所用的文件通道。特别是关闭该通道对映射关系的有效性没有任何影响。
很多内存映射文件的细节从根本上是取决于底层操作系统的,因此是未指定的。当所请求的区域没有完全包含在此通道的文件中时,此方法的行为是未指定的。未指定是否将此程序或另一个程序对底层文件的内容或大小所进行的更改传播到缓冲区。未指定将对缓冲区的更改传播到文件的频率。
对于大多数操作系统而言,与通过普通的 read
和 write
方法读取或写入数千字节的数据相比,将文件映射到内存中开销更大。从性能的观点来看,通常将相对较大的文件映射到内存中才是值得的。
- 参数:
mode
- 根据是按只读、读取/写入或专用(写入时拷贝)来映射文件,分别为 filechannel.mapmode
类中所定义的 read_only
、read_write
或 private
之一position
- 文件中的位置,映射区域从此位置开始;必须为非负数size
- 要映射的区域大小;必须为非负数且不大于 integer.max_value
- 抛出:
nonreadablechannelexception
- 如果 mode 是 read_only
,但是不允许对此通道进行读取操作
nonwritablechannelexception
- 如果 mode 是 read_write
或 private
,但是不允许此通道进行读取和写入操作
illegalargumentexception
- 如果关于参数的前提不成立
ioexception
- 如果发生其他 i/o 错误- 另请参见:
filechannel.mapmode
,
mappedbytebuffer