nio buffer的capacity,position和limit

原创
2015/09/22 17:41
阅读数 3.6K

nio Buffer的capacity,position,limit的3个属性说明:

  1. capacityBuffer的内存固定的一个大小值,一般创建Buffer时初始化写入-->ByteBuffer.allocate(capacity)需注意写入数据时需考虑数据大小是否超过Buffer的大小,如果超过需对Buffer进行扩容。

  2. positionlimit都分读和写2种情况:

  3. position读和写情况的分析:
    1)写数据到Buffer中时,position表示写入数据的当前位置。position的初始值为0.当一个byte、long等数据写到Buffer后, position会向下移动到下一个可插入数据的Buffer单元position最大可为capacity – 1(因为position的初始值为0.
    2)读数据到Buffer中时,position表示读入数据的当前位置,如position=2时表示已开始读入了3个byte,或从第3个byte开始读取。通过ByteBuffer.flip()切换到读模式时position会被重置为0,当Buffer从position读入数据后,position会下移到下一个可读入的数据Buffer单元。

  4. limit读和写情况的分析:
    1)写数据时,limit表示可对Buffer最多写入多少个数据。
    2)读数据时,limit表示Buffer里有多少可读数据(not null的数据),因此能读到之前写入的所有数据(limit被设置成已写数据的数量,这个值在写模式下就是position



展开阅读全文
打赏
0
2 收藏
分享
加载中
Jack_Q博主

引用来自“吴财雄”的评论

神特么分“读数据到Buffer中”,“写数据到Buffer中”两种情况,那数据到底是从channel另一端流向buffer这端,还是从buffer这端流向channel另一端?
既可以从通道中读取数据,又可以写数据到通道。
2017/08/28 16:43
回复
举报
神特么分“读数据到Buffer中”,“写数据到Buffer中”两种情况,那数据到底是从channel另一端流向buffer这端,还是从buffer这端流向channel另一端?
2017/07/26 18:02
回复
举报
更多评论
打赏
2 评论
2 收藏
0
分享
返回顶部
顶部