capacity(): 表明缓冲区的容量大小, 一旦确定了大小, 将不能再改变;
limit(): 告诉您到目前为止已经往缓冲区填了多少字节,或者用#limit(int)来改变这个限制;
position(): 告诉您当前的位置,以执行下一个读/写操作;
mark(): 为了稍后用 reset() 进行重新设置而记住某个位置;
flip(): 交换限制指针和位置指针,然后将位置置为 0,并废弃已经做的mark标记。
缓冲区的基本操作是读#get()和写#put()。
缓冲区类型:
NIO具有7种特定的 Buffer 类型,每种类型对应着一个基本数据类型(除了 boolean)
- ByteBuffer //字节缓冲区
- CharBuffer //字符缓冲区
- DoubleBuffer //double 缓冲区
- FloatBuffer //float 缓冲区
- IntBuffer //int 缓冲区
- LongBuffer //long 缓冲区
- ShortBuffer //short 缓冲区
缓冲区分为直接缓冲区和间接缓冲区,直接缓冲区的创建成本要高于间接缓冲区,但同时它也会提供更快的I/O访问速度。所以直接缓冲区适合那种长期存在的缓冲区,而间接缓冲区则适合于生命周期较短的。还有,要注意,只有ByteBuffer可以创建直接缓冲区。
缓冲区的几个内部状态的改变:
容量(capacity),缓冲区大小
限制(limit),***个不应被读取或写入的字节的索引,总是小于容量。
位置(position),下一个被读取或写入的字节的索引,总是小于限制。
0 <= position <= limit <= capacity
1. clear()方法:设置limit为capacity,position为0,并丢弃mark。
2. filp()方法:设置limit为当前position,然后设置position为0,并丢弃mark。
3. rewind()方法:保持limit不变,设置position为0,并丢弃mark。
原文链接:http://zddava.iteye.com/blog/315826
【编辑推荐】