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()方法,将缓冲区转换为写入模式。
代码如下:
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高并发实战》