java.nio

异常
java.lang.Object
  继承者 java.nio.Buffer
      继承者 java.nio.ByteBuffer
          继承者 java.nio.MappedByteBuffer
所有已实现的接口:
Comparable< ByteBuffer>

public abstract class MappedByteBuffer
     
extends ByteBuffer

直接字节缓冲区,其内容是文件的内存映射区域。

映射的字节缓冲区是通过 FileChannel.map 方法创建的。此类用特定于内存映射文件区域的操作扩展 ByteBuffer 类。

映射的字节缓冲区和它所表示的文件映射关系在该缓冲区本身成为垃圾回收缓冲区之前一直保持有效。

映射的字节缓冲区的内容可以随时更改,例如,在此程序或另一个程序更改了对应的映射文件区域的内容的情况下。这些更改是否发生(以及何时发生)与操作系统无关,因此是未指定的。

全部或部分映射的字节缓冲区可能随时成为不可访问的,例如,如果我们截取映射的文件。试图访问映射的字节缓冲区的不可访问区域将不会更改缓冲区的内容,并导致在访问时或访问后的某个时刻抛出未指定的异常。因此强烈推荐采取适当的预防措施,以避免此程序或另一个同时运行的程序对映射的文件执行操作(读写文件内容除外)。

除此之外,映射的字节缓冲区的功能与普通的直接字节缓冲区完全相同。

从以下版本开始:
1.4

方法摘要
 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
 

方法详细信息

isLoaded

public final boolean isLoaded()
判断此缓冲区的内容是否位于物理内存中。

返回值为 true 意味着此缓冲区中所有数据极有可能都位于物理内存中,因此是可访问的,不会导致任何虚拟内存页错误,也无需任何 I/O 操作。返回值为 false 不一定意味着缓冲区的内容不位于物理内存中。

返回值是一个提示,而不是保证,因为在此方法的调用返回之前,底层操作系统可能已经移出某些缓冲区数据。

返回:
如果此缓冲区内容可能位于物理内存中,则返回 true

load

public final MappedByteBuffer load()
将此缓冲区内容加载到物理内存中。

此方法最大限度地确保在它返回时此缓冲区内容位于物理内存中。调用此方法可能导致一些页面错误,并导致发生 I/O 操作。

返回:
此缓冲区

force

public final MappedByteBuffer force()
将此缓冲区所做的内容更改强制写入包含映射文件的存储设备中。

如果映射到此缓冲区中的文件位于本地存储设备上,那么当此方法返回时,可以保证自此缓冲区创建以来,或自最后一次调用此方法以来,已经将对缓冲区所做的所有更改写入到该设备。

如果文件不在本地设备上,则无法作出这样的保证。

如果此缓冲区不是以读/写模式 (FileChannel.MapMode.READ_WRITE) 映射的,则调用此方法无效。

返回:
此缓冲区