boolean isDirect()方法的作用:判断此缓冲区是否为直接缓冲区。那什么是“直接缓冲区”呢?先来看看使用非直接缓冲区操作数据的流程,如图1-17所示。
在图1-17中可以发现,通过ByteBuffer向硬盘存取数据时是需要将数据暂存在JVM的中间缓冲区,如果有频繁操作数据的情况发生,则在每次操作时都会将数据暂存在JVM的中间缓冲区,再交给ByteBuffer处理,这样做就大大降低软件对数据的吞吐量,提高内存占有率,造成软件运行效率降低,这就是非直接缓冲区保存数据的过程,所以非直接缓冲区的这个弊端就由直接缓冲区解决了。
使用直接缓冲区操作数据的过程如图1-18所示。
图1-17 使用非直接缓冲区保存数据的过程
图1-18 使用直接缓冲区保存数据的过程
如果使用直接缓冲区来实现两端数据交互,则直接在内核空间中就进行了处理,无须JVM创建新的缓冲区,这样就减少了在JVM中创建中间缓冲区的步骤,增加了程序运行效率。
示例代码如下:
public class Test7_1{ public static void main(String[]args){ ByteBuffer byteBuffer=ByteBuffer.allocateDirect(100); System.out.println(byteBuffer.isDirect()); } }
打印结果如下:
true
成功创建出直接缓冲区。