Java NIO 缓冲区Buffer(二)缓冲区的建立

建立缓冲区的方式java

建立方式存在两种:数组

1. allocate方式函数

2. wrap方式spa

allocate方式

CharBuffer charBuffer = CharBuffer.allocate(10);

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

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()函数的话数组内的值也会跟着改变,相反,若是咱们对数组进行数据变更,那么缓冲区也同样会受到影响。blog

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

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

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

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

 

缓冲区的复制

主要有三种方式:io

duplicate方法

asReadOnlyBuffer方法

slice方法

duplicate方法

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

asReadOnlyBuffer方法

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

 

slice方法

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

相关文章
相关标签/搜索