zoukankan      html  css  js  c++  java
  • 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高并发实战》

      

  • 相关阅读:
    实验0 了解和熟悉操作系统一、目的和要求
    读后感
    有穷自动机自动转化
    文法分析
    词法分析随笔
    git操作笔记
    面试题汇总
    MYSQL数据库设计
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    invalid comparison:java.util.Date and java.lang.String
  • 原文地址:https://www.cnblogs.com/MrSaver/p/13130772.html
Copyright © 2011-2022 走看看