NIO框架-Buffer学习

2016-05-29  本文已影响0人  大熊践行记录

Buffer是什么?

重要属性:

Buffer中里定义类四个属性,mark,position,limit,capacity,那这四个属性又是做什么用呢?

  1. Cpapcity:表示容量,表示缓冲区可以存储的最大的容量
  2. Limit : 表示缓冲区的上限,在文档中这样解释:

A buffer's limit is the index of the first element that should not be read or written.

limit 的值是第一个不能读写的元素的位置,比如limit = 512,表示从512这个位置开始的空间不能读写,就不能用. position

3.mark : 一个标记位置,标记重置的位置,在文档中这样说到:

A buffer's mark is the index to which its position will be reset when the {@link #reset reset} method is invoked

4.position : 当前缓存可以读取的索引位置

Buffer操作

缓冲的通常操作包括读取缓冲数据和写入缓冲数据,除了这之外,buffer还提供了清空缓冲、反转和rewinding(倒卷,这个词不知道如何翻译好)

  1. clearing : 清空缓存,但是不清除缓存的数据. 代码如下
    <pre><code>
    public final Buffer clear()
    {
    position = 0;
    limit = capacity;
    mark = -1;
    return this;
    }
    </code></pre>
    2.Flip: flip buffer,按字面理解是反转缓存,那么怎么反转缓存呢?看下面的代码就比较清楚了.
    <pre><code>
    public final Buffer flip() {
    limit = position;
    position = 0;
    mark = -1;
    return this;
    }
    </code></pre>

看上面的代码就知道了,缓存区的上界为position,position以后的缓存区不可用,这个缓存区的当前位置从0开始.
3.rewind :rewind操作让当前的缓冲区的位置从0开始,mark=-1,就等于重置缓存区,从缓存区的0位置开始读取.
代码如下:
<pre>
<code>
public final Buffer rewind() {
position = 0;
mark = -1;
return this;
}
</code>
</pre>

非线程安全

非线程安全:Buffer是非线程安全,如果一个缓存区被多个线程使用的话,需要通过synchronization来控制线程安全.

总结:

上一篇下一篇

猜你喜欢

热点阅读