模块  java.base
软件包  java.nio

Class MappedByteBuffer

  • 实现的所有接口
    Comparable<ByteBuffer>

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

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

    映射的字节缓冲区及其表示的文件映射在缓冲区本身被垃圾收集之前保持有效。

    映射字节缓冲区的内容可以随时改变,例如,如果该程序或其他程序改变了映射文件的相应区域的内容。 这些变化是否发生以及何时发生,取决于操作系统,因此未指定。

    映射字节缓冲区的全部或部分可能随时变得不可访问,例如,如果映射文件被截断。 尝试访问映射字节缓冲区的不可访问区域不会更改缓冲区的内容,并且会在访问时或稍后的某个时间引发未指定的异常。 因此,强烈建议采取适当的预防措施,以避免此程序或同时运行的程序操纵映射文件,但读取或写入文件的内容除外。

    映射字节缓冲区的行为与普通直接字节缓冲区没有区别。

    从以下版本开始:
    1.4
    • 方法详细信息

      • 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 ),则调用此方法无效。

        结果
        这个缓冲区