美文网首页
NIO框架-Buffer学习

NIO框架-Buffer学习

作者: 大熊践行记录 | 来源:发表于2016-05-29 15:02 被阅读0次

    Buffer是什么?

    • Buffer是java.nio框架下的一个缓冲类,用来存储java的基本类型的数据,比如byte,char,long,int,double,
    • short等数据的类型.缓冲区是一个可以读写的数据,nio的通道通过Buffer来读写数据,比如从通道channel读数据的时候,会先把一块的数据都到缓冲区中.把数据写入到通道的时候,同样会先把数据存储到缓冲区中.
    • 它是nio框架的核心类,它是一个抽象类,它的子类包括
      ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、 IntBuffer、LongBuffer 和 ShortBuffer.

    重要属性:

    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来控制线程安全.

    总结:

    • Buffer是nio框架的一个核心类也是一个基础类,是一个用来存储java的基本类型的数据的缓存对象. 子类包括 :ByteBuffer 、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer.

    • 重要的属性包括 capacity,mark,position,limit.capacity表示缓冲区的容量,mark表示重置的时候的标记,
      position表示当前缓存区可用读取的位置,limit表示缓存区可以操作的上界.

    • Buffer是一个抽象类,已经提供了clearing、flip、rewind3个重要操作,clearing表示是清空缓存数据,

    • flip表示是对反转当前缓存区,rewind表示重新读取缓存区的数据.

    • Buffer是一个非线程安全的类.

    相关文章

      网友评论

          本文标题:NIO框架-Buffer学习

          本文链接:https://www.haomeiwen.com/subject/hydqdttx.html