• Java NIO 缓冲区Buffer(二)缓冲区的创建


    创建缓冲区的方式

    创建方式存在两种:

    1. allocate方式

    2. wrap方式

    allocate方式

     CharBuffer charBuffer = CharBuffer.allocate(10);

    Buffer下的每一个子类都有allcate方法,以CharBuffer为例,它将隐含的从堆空间中分配一个char型数组作为备份存储器来存储10个char变量。

       public static CharBuffer allocate(int capacity) {
            if (capacity < 0)
                throw new IllegalArgumentException();
            return new HeapCharBuffer(capacity, capacity);
        }
       
    
    
        HeapCharBuffer(int cap, int lim) {            // package-private
     
                super(-1, 0, lim, cap, new char[cap], 0);
            /*
            hb = new char[cap];
            offset = 0;
            */
         }

    wrap方式

    wrap方式更灵活一点,它可以提供自己定义的数组取用作缓冲区备份存储器。

    1         char[] buffer = new char[10];
    2         CharBuffer charBuffer = CharBuffer.wrap(buffer);

    这种方式也能返回一个CharBuffer对象,不过它的数据元素确是存储在数组中,我们知道由于数组的特性,如果我们调用put()函数的话数组内的值也会跟着改变,相反,如果我们对数组进行数据变动,那么缓冲区也一样会受到影响。

    另外wrap还有一个重载的方法,可以提供设置position和limit的值。

    CharBuffer charBuffer = CharBuffer.wrap(buffer,2,3);

    代码会创建出一个position是2,limit是5,capacity为10的Buffer。注意这只是初始设置,后续你也可以改变它。

            HeapCharBuffer(char[] buf, int off, int len) { // package-private
     
                super(-1, off, off + len, buf.length, buf, 0);
            /*
            hb = buf;
            offset = 0;
            */
     
            }

    缓冲区的复制

    主要有三种方式:

    duplicate方法

    asReadOnlyBuffer方法

    slice方法

    duplicate方法

    创建出一个原有缓冲区的拷贝(产生一个新的缓冲区对象),但是两个都是共享数据元素,修改一个对另一个可见。但是上界,容量,和位置属性都是特有的。

    asReadOnlyBuffer方法

    顾名思义,复制的是一个只读缓冲区。与duplicate没什么区别。不能修改。

    slice方法

    用于分割缓冲区,创建一个从原始缓冲区的当期位置开始的新缓冲区,其容量是原始缓冲区的剩余元素数量。

  • 相关阅读:
    博客园CSS备份5
    博客园界面自定义教程
    awk 入门教程(阮一峰)
    批量检查cksum是否一致
    linux文件批量重命名
    cipher block
    riscv-gdbserver
    rsa_gmp
    asic
    video
  • 原文地址:https://www.cnblogs.com/javadevelper/p/9501593.html
Copyright © 2020-2023  润新知