Buffer

  • 定义描述:

    说白了,就是一种容器,而这种容器就是专门用来存储一种指定的原始数据类型(基本数据类型int, byte,char,long,short)

类似参考的概念有集合List,数组,Set, Tree等等

  • 特性描述

  1. buffer是线性的,有限的基本类型元素的组合;//因为底层是数组

  2. 每个缓冲区buffer都是可读的,但并不是每个buffer都是可写的;

  3. Buffer并不是线程安全的,如果多个线程访问buffer时,最好使用同步策略synchronization;

  4. Buffer提倡使用调用链的方式进行调用,如b.flip().position(23).limit(42)

 

  • buffer中可以获取到什么信息?或者说,从buffer中,能了解到什么?有什么信息是对我们有用的?

//【闲外话:为什么会有这么多问题,其实我是想从不同的角度去理解一件事物,事物可能从不同的角度表现出来的属性是不一样的,这样可以让我更加全方位的理解,因为有的时候,当别人突然问我时,不知所措;】

  1. buffer里的数据内容,就是你存进缓存buffer里的内容

  2. 三个指针吧capacity, limit, position;通过这三个指针,你可以对buffer的整体情况了解




  • capacity, limit, position 表示什么意思

  1. capacity:就是缓存的最大值,此属性的特点就是不可能为负值,buffer一旦创建,就会不改变

  2. limit:就是当前实际可以存储的最大容量

  3. position: 就是进行当前读或者写的位置。




  • capacity  limit的区别?

    capacity表示的是创建缓存时,指定的存储大小,这个值是不能改变的,

    limit是实际存储的大小,这个值是可以改变的

    比方说,一个完整的5L水桶,上面有1L,2L,3L,4L的刻度,

    那么,capacity就是5L,这个值是不会改变的

    limit呢?如果我们规定此水桶只能装到2L,那么limit就是2L了,虽然此水桶最大可以存5L,但实际只能存储到2L

  • mark, position, limit, capacity的大小关系

    mark <= position <= limit <=capacity

 

  • clear() API

    使用场景:从管道中读数据到缓存,也就是类似于put操作

    操作的结果:limit = capacity,position = 0

  • flip() API

    使用场景:将缓存中的数据,写到管道中去,类似于get操作;

    操作的结果:limit = position,position = 0

  • flip()  clear()的区别?

    你可以把缓冲区当做为参考对象,如果你打算往缓冲区里 写入数据的话,就使用clear()操作(很明显的,只有清除clear了旧的数据,新的数据才可以进来啊)

    相反,如果你打算从缓冲区里仅仅是读取数据的话,就可以使用flip方法。

    很明显,一个针对的是读,一个针对是写

  • Buffer的子类都有哪些?


Java NIO 之 Buffer


很明显,目前Buffer的子类还是很丰富的,73个。

  • 常用的有哪些呢?


    1. ByteBuffer

    2. CharBuffer

    3. DoubleBuffer

    4. FloatBuffer

    5. IntBuffer

    6. LongBuffer

    7. ShortBuffer

    8. StringCharBuffer

    9. MappedByteBuffer


Java NIO 之 Buffer

Java NIO 之 Buffer

Java NIO 之 Buffer

Java NIO 之 Buffer









本文转自故新51CTO博客,原文链接: http://blog.51cto.com/xingej/1970018,如需转载请自行联系原作者





相关文章: