其他
给大忙人们看的 Java NIO 极简教程
The following article is from JavaEdge Author JavaEdge
作者 | JavaEdge
来源 | JavaEdge(ID:Java-Edge)
头图 | CSDN 下载自东方IC
写数据到 Buffer 调用 buffer.flip() 从 Buffer 中读取数据 调用 clear() 或 compact()
clear() 会清空整个缓冲区 compact() 只会清除已经读过的数据。任何未读数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。
写数据到Buffer时,position表示当前位置。初始的position值为0,当一个byte、long等数据写到Buffer后, position会向前移动到下一个可插入数据的Buffer单元。所以position最大可为capacity–1。 读数据时,也是从某特定位置读。当将Buffer从写模式切换到读模式,position会被重置为0。当从Buffer的position处读取数据时,position向前移动到下一个可读的位置。
写模式下,表示最多能往Buffer写多少数据。所以此时limit=capacity。 读模式时, limit表示最多能读到多少数据。
Java NIO Buffer有如下类型
从Channel写到Buffer
1、从Buffer读取数据到Channel。
int bytesWritten = inChannel.write(buf);
2、使用get()方法从Buffer中读取数据。
byte aByte = buf.get();
clear()与compact()方法
调用clear() position将被置0,limit被置成 capacity的值。即 Buffer 被清空。Buffer中的数据并未清除,只是这些标记告诉我们可以从哪里开始往Buffer写数据。如果Buffer中有一些未读数据,调用clear(),数据将“被遗忘”,意味着不再有任何标记会告诉你哪些数据被读过,哪些还没有。如果Buffer中仍有未读的数据,且后续还想读这些数据,但你需要先写一些数据,那么使用compact()。 compact() 将所有未读数据拷贝到Buffer起始处。然后将position设到最后一个未读元素正后面。limit属性依然像clear()方法一样,设置成capacity。现在Buffer准备好写数据了,但是不会覆盖未读数据。
mark()与reset()方法
buffer.mark();
// call buffer.get() a couple of times, e.g. during parsing.
buffer.reset();
equals()与compareTo()方法
equals()
有相同的类型(byte、char、int等) Buffer中剩余的byte、char等的个数相等 Buffer中所有剩余的byte、char等都相同。
compareTo()
第一个不相等的元素小于另一个Buffer中对应的元素 所有元素都相等,但第一个Buffer比另一个先耗尽(第一个Buffer的元素个数比另一个少)。
剩余元素是从 position到limit之间的元素。
http://tutorials.jenkov.com/java-nio/buffers.html
推 荐
CSDN公众号全新搜索技能上线啦!
只要在公众号后台回复消息
就能自动回复想搜索的内容啦!
猜猜回复“Mysql安装”会出现什么
更多精彩推荐
☞腾讯 AI 医学进展破解“秃头”难题,登 Nature 子刊!
☞倪光南、求伯君“出山”:爱解 Bug、无惧“35岁魔咒”、编码之路痛并快乐!
☞Value DeFi遭黑客攻击始末,闪电贷这次又带走了700万美元