前面提到了NIO的三个核心部分,但是为了让章数看起来多一点点 我放到了这里来写,不可否认有一定的水贴成分 哈哈 话不多说开始
01
—
Buffer
缓冲区本质上是一个可读可写数据的内存块,可以理解成是一个容器对象,该对象提供了一组方法,可以更轻松地使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。channel提供从文件、网络读取数据渠道,但是读取或写入的数据都必须经过buffer
Buffer类和它的子类:
在NIO中,Buffer是一个顶层父类 它是一个抽象类
Buffer定义了所有缓冲区都具有的四个属性来提供关于其所有包含的数据元素的信息

capacity:
容量,在缓冲区创建时设定且不能改变的
limit:
表示缓冲区的当前终点,不能对缓冲区超过极限的位置进行读写操作,且极限是可以修改的
Position:
位置,下一个要被读或写的元素索引,每次读写缓冲区数据都会改变这个值,为下次读写做准备
Mark:
标记
Buffer类相关方法:
capacity:返回此缓存区的容量position:返回此缓存区的位置position(int newPosistio):设置此缓存区的位置limit:返回此缓存区的限制limit(int newlimit)设置此缓存区的限制mark:在此缓冲区的位置设置标记reset:将此缓冲区设置的位置重置为以前的标记位置clear:清除此缓冲区,将各个标记恢复到初始化状态(重置标志位),但数据并没有真正消除flip:反转此缓冲区rewind:重绕此缓冲区remaining:返回当前位置和限制之间是否有元素hashRemaining:告知此缓冲区是否为只读缓冲区hashArry:告知此缓冲区是否具有可访问的底层实现数组array:返回此缓冲区的底层实现数组arrayOffset:返回此缓冲区的底层实现数组中的第一个缓冲区元素的偏移量isDirect:告知此缓冲区是否为直接缓冲区
allocateDirect(int capacity) 创建直接缓冲区allocate: 设置 缓冲区初始容量wrap(byte[] array) 把一个数组放到缓冲区中使用Wrap (byte[] array,int offset,int length) 初始化位置offset和上界length的缓冲区get 从当前位置position上get,get之后 position会自动加一get(index) 从绝对位置getput(byte b) 从当前位置上put,put之后 position自动加一put(int index,byte b) 从绝对位置上put,因为知道在哪里放 所有position不会变化
Buffer的分散和聚合ScatteringAndGathering
文章转载自Nullit,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




