购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.8 直接缓冲区

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

成功创建出直接缓冲区。 g+/YMF4VxkJqe40N4Ygb8rRfMa6SE2lXfPiL9q5spZ7Bm9LBENKVJq7PkPYg5Www

点击中间区域
呼出菜单
上一章
目录
下一章
×