- 非直接缓冲区
通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存之中。
应用程序和磁盘之间想要传输数据,没办法直接进行传输,操作系统处于安全的考虑,会经过物理磁盘、内核地址空间、用户地址空间、应用程序几个步骤。假如应用程序想从磁盘中读取一个数据,这时候应用程序会向操作系统发起一个读请求,那么磁盘中的数据会被读取到内核地址空间中,然后会把内核地址空间中的数据拷贝到用户地址空间中(JVM内存中),最后再把数据读取到程序中。
- 直接缓冲区
通过allocateDirect()方法分配缓冲区,将缓冲区建立在物理内存之中。
直接用物理内存作为缓冲区,会经过物理磁盘、物理内存映射文件、应用程序这几个步骤,读写数据直接通过物理内存进行。
public static void demo3() {ByteBuffer byteBuffer = ByteBuffer.allocateDirect(2014);System.out.println(byteBuffer.isDirect());}
通过isDirect()方法来判断是否为直接缓冲区。
