Java高并发教程:详解NIO Buffer类及其属性

Java高并发教程:详解NIO Buffer类及其属性

NIO Buffer

  NIO的Buffer(缓存区)本质上是一个内存块,既可以写入数据,也可以从中读取数据。NIO的Buffer类,是一个抽象类,位于java.nio包中,其内部是一个内存块(数组)。

需要强调的是:Buffer类是一个非线程安全类。

Buffer类

  Buffer类一个抽象类,对应于Java中主要数据类型,再NIO中有8种缓存区类:  

 

 

 Buffer的使用步骤

  1. 使用创建子类实例对象的allocate()方法,创建一个Buffer类的实例对象
  2. 调用put方法,将数据写入到缓冲区中
  3. 写入完成后,在开始读取数据前,调用Buffer.flip()方法,将缓冲区转换为读模式
  4. 调用get方法,从缓冲区中读取数据
  5. 读取完成后,调用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高并发实战》

 

  

 

posted @ 2020-06-15 14:34  子烁爱学习  阅读(411)  评论(0编辑  收藏  举报