文档章节

nio buffer的capacity,position和limit

Jack_Q
 Jack_Q
发布于 2015/09/22 17:41
字数 355
阅读 1439
收藏 2

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



© 著作权归作者所有

Jack_Q

Jack_Q

粉丝 13
博文 49
码字总数 9557
作品 1
武汉
架构师
私信 提问
加载中

评论(2)

Jack_Q
Jack_Q 博主

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

神特么分“读数据到Buffer中”,“写数据到Buffer中”两种情况,那数据到底是从channel另一端流向buffer这端,还是从buffer这端流向channel另一端?
既可以从通道中读取数据,又可以写数据到通道。
吴财雄
神特么分“读数据到Buffer中”,“写数据到Buffer中”两种情况,那数据到底是从channel另一端流向buffer这端,还是从buffer这端流向channel另一端?
IoBuffer和ByteBuffer

最近在做通信和传输的项目,大量的使用NIO和Mina,虽然之前一直对这部分比较关注,但是还没有好好的总结一下这方面的内容。今天想写点儿NIO里最基本的一个类ByteBuffer。至于Mina中的IoBuffe...

Gaischen
2012/10/24
10.8K
14
Java NIO使用及原理分析(二)

转载自:李会军•宁静致远 在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些...

tantexian
2016/07/07
25
0
Java NIO (一)

Java NIO 核心部分(简单来说): Channels (通道) Buffers (缓冲区) Selectors (选择器) ----------------------------------------------------- Channel实现: FileChannel (从文件中...

玄影镜心
2015/09/22
64
0
04. Java NIO Buffer 缓冲区

Java NIO Buffers用于和NIO Channel交互。正如你已经知道的,我们从channel中读取数据到buffers里,从buffer把数据写入到channels. buffer本质上就是一块内存区,可以用来写入数据,并在稍后...

逝去的回忆
2016/11/21
25
0
Java NIO缓冲区ByteBuffer

Java NIO缓冲区ByteBuffer 抽象类Buffer的接口 capacity:作为一个内存块,Buffer有一个固定的大小值,也叫“capacity”。你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,...

秋风醉了
2014/06/28
115
0

没有更多内容

加载失败,请刷新页面

加载更多

Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
31分钟前
8
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
42分钟前
7
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
50分钟前
6
0
HashMap源码分析

read

V丶zxw
今天
5
0
Python字符串或JSON字符串转字典dict、列表list

有3种方法 1、使用ast模块 >>> import ast>>> s = '["test",1]'>>> ast.literal_eval(s)['test',1]>>> s = '{"test":1}'>>> ast.literal_eval(s){'test': 1} 2、eval函数,这个......

编程老陆
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部