public abstract class MappedByteBuffer extends ByteBuffer
映射的字节缓冲区是通过FileChannel.map
方法创建的。 此类扩展了具有特定于内存映射文件区域的操作的ByteBuffer
类。
映射字节缓冲区及其表示的文件映射在缓冲区本身被垃圾回收之前保持有效。
映射字节缓冲区的内容可以随时更改,例如,如果该程序或其他映射文件的对应区域的内容被更改。 这种变化是否发生,何时发生,是操作系统依赖的,因此是未指定的。
映射字节缓冲区的全部或部分可能在任何时候变得无法访问,例如映射文件被截断。 访问映射字节缓冲区的不可访问区域的尝试不会更改缓冲区的内容,并将导致在访问时或稍后的时候抛出未指定的异常。 因此,强烈建议您采取适当的预防措施,以避免该程序或同时运行的程序对映射文件进行操作,但读取或写入文件的内容除外。
映射的字节缓冲区的行为与普通的直接字节缓冲区不同。
Modifier and Type | Method and Description |
---|---|
MappedByteBuffer |
force()
强制将此缓冲区内容的任何更改写入包含映射文件的存储设备。
|
boolean |
isLoaded()
告诉这个缓冲区的内容是否驻留在物理内存中。
|
MappedByteBuffer |
load()
将此缓冲区的内容加载到物理内存中。
|
allocate, allocateDirect, array, arrayOffset, asCharBuffer, asDoubleBuffer, asFloatBuffer, asIntBuffer, asLongBuffer, asReadOnlyBuffer, asShortBuffer, compact, compareTo, duplicate, equals, get, get, get, get, getChar, getChar, getDouble, getDouble, getFloat, getFloat, getInt, getInt, getLong, getLong, getShort, getShort, hasArray, hashCode, isDirect, order, order, put, put, put, put, put, putChar, putChar, putDouble, putDouble, putFloat, putFloat, putInt, putInt, putLong, putLong, putShort, putShort, slice, toString, wrap, wrap
public final boolean isLoaded()
返回值为true意味着该缓冲区中的所有数据很可能驻留在物理内存中,因此可能会被访问,而不会导致任何虚拟内存页面错误或I / O操作。 false的返回值并不一定意味着缓冲区的内容不会驻留在物理内存中。
返回的值是一个提示,而不是一个保证,因为底层操作系统可能会在调用此方法时返回一些缓冲区的数据。
public final MappedByteBuffer load()
这种方法尽最大努力确保当它返回时,该缓冲区的内容驻留在物理内存中。 调用此方法可能会导致一些页面错误和I / O操作发生。
public final MappedByteBuffer force()
如果映射到此缓冲区的文件驻留在本地存储设备上,那么当此方法返回时,将保证自从创建缓冲区以来所做的所有更改,或自上次调用该方法后,都将被写入该设备。
如果文件不在本地设备上,则不会提供此类保证。
如果此缓冲区没有映射到读/写模式( FileChannel.MapMode.READ_WRITE
),则调用此方法将不起作用。