java.lang.Object java.nio.Buffer java.nio.ByteBuffer java.nio.MappedByteBuffer
public abstract class MappedByteBuffer
直接字节缓冲区,其内容是文件的内存映射区域。
映射的字节缓冲区是通过 FileChannel.map
方法创建的。此类用特定于内存映射文件区域的操作扩展 ByteBuffer
类。
映射的字节缓冲区和它所表示的文件映射关系在该缓冲区本身成为垃圾回收缓冲区之前一直保持有效。
映射的字节缓冲区的内容可以随时更改,例如,在此程序或另一个程序更改了对应的映射文件区域的内容的情况下。这些更改是否发生(以及何时发生)与操作系统无关,因此是未指定的。
除此之外,映射的字节缓冲区的功能与普通的直接字节缓冲区完全相同。
方法摘要 | |
---|---|
MappedByteBuffer |
force() 将此缓冲区所做的内容更改强制写入包含映射文件的存储设备中。 |
boolean |
isLoaded() 判断此缓冲区的内容是否位于物理内存中。 |
MappedByteBuffer |
load() 将此缓冲区内容加载到物理内存中。 |
从类 java.nio.ByteBuffer 继承的方法 |
---|
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 |
从类 java.nio.Buffer 继承的方法 |
---|
capacity, clear, flip, hasRemaining, isReadOnly, limit, limit, mark, position, position, remaining, reset, rewind |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
方法详细信息 |
---|
public final boolean isLoaded()
返回值为 true 意味着此缓冲区中所有数据极有可能都位于物理内存中,因此是可访问的,不会导致任何虚拟内存页错误,也无需任何 I/O 操作。返回值为 false 不一定意味着缓冲区的内容不位于物理内存中。
返回值是一个提示,而不是保证,因为在此方法的调用返回之前,底层操作系统可能已经移出某些缓冲区数据。
public final MappedByteBuffer load()
此方法最大限度地确保在它返回时此缓冲区内容位于物理内存中。调用此方法可能导致一些页面错误,并导致发生 I/O 操作。
public final MappedByteBuffer force()
如果映射到此缓冲区中的文件位于本地存储设备上,那么当此方法返回时,可以保证自此缓冲区创建以来,或自最后一次调用此方法以来,已经将对缓冲区所做的所有更改写入到该设备。
如果文件不在本地设备上,则无法作出这样的保证。
如果此缓冲区不是以读/写模式 (FileChannel.MapMode.READ_WRITE
) 映射的,则调用此方法无效。