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方式更灵活一点,它可以提供自己定义的数组取用作缓冲区备份存储器。

        char[] buffer = new char[10];
        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方法

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值