Java高并发教程:详解NIO Buffer类及其属性
NIO Buffer
NIO的Buffer(缓存区) 本质上是一个内存块,既可以写入数据,也可以从中读取数据。NIO的Buffer类,是一个抽象类,位于java.nio包中,其内部是一个内存块(数组)。
需要强调的是:Buffer类是一个非线程安全类。
Buffer类
Buffer类一个抽象类,对应于Java中主要数据类型,再NIO中有8种缓存区类:
Buffer的使用步骤
- 使用创建子类实例对象的 allocate()方法,创建一个Buffer类的实例对象。
- 调用put方法,将数据写入到缓冲区中。
- 写入完成后,在开始读取数据前, 调用Buffer.flip()方法,将缓冲区转换为读模式。
- 调用get方法,从缓冲区中读取数据。
- 读取完成后, 调用Buffer.clear() 或Buffer.compact()方法,将缓冲区转换为写入模式。
代码如下:
java;gutter:true;
public void buffer() {
//[1] 创建Buffer实例对象
IntBuffer intBuffer = IntBuffer.allocate(10);
//[2] 缓存区默认为写模式,将数据写入缓存区
intBuffer.put(1);
intBuffer.put(2);
intBuffer.put(3);
//[3] 将缓存区转换为读模式
intBuffer.flip();
//从缓存区读取数据
System.out.println(intBuffer.get());
System.out.println(intBuffer.get());
System.out.println(intBuffer.get());
//[4] 将缓存区换为写模式
// intBuffer.clear(); Or intBuffer.compact();
//[5] 倒带,即从头来一次!
intBuffer.rewind();
System.out.println(intBuffer.get());
//[6] Mark和Reset
intBuffer.mark();
System.out.println(intBuffer.get());
intBuffer.reset();
System.out.println(intBuffer.get());
}
参考资料
- 《Netty、Redis、Zookeeper高并发实战》
Original: https://www.cnblogs.com/MrSaver/p/13130772.html
Author: 子烁爱学习
Title: Java高并发教程:详解NIO Buffer类及其属性
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538100/
转载文章受原作者版权保护。转载请注明原作者出处!