博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java NIO 之 Buffer
阅读量:6846 次
发布时间:2019-06-26

本文共 1484 字,大约阅读时间需要 4 分钟。

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的子类都有哪些?

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

  • 常用的有哪些呢?

    1. ByteBuffer

    2. CharBuffer

    3. DoubleBuffer

    4. FloatBuffer

    5. IntBuffer

    6. LongBuffer

    7. ShortBuffer

    8. StringCharBuffer

    9. MappedByteBuffer

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

你可能感兴趣的文章
Java 面向对象 之 代码块
查看>>
Linux命令wget下载整个网站或索引目录
查看>>
sieve 一些简单的例子
查看>>
Excel数据表格排版及输出打印技巧大全限时特惠
查看>>
走火入魔.NET权限组件在公司的网络版温湿度监控系统中进行实战-用列表资源权限(数据集权限)思想来解决实际问题...
查看>>
python条件判断与循环
查看>>
关于关于序列自增实际应用
查看>>
互联网精准扶贫 四川案例为全球减贫提供中国方案
查看>>
11.8PMP试题每日一题
查看>>
JDBC的CRUD操作之PreparedStatement的修改操作
查看>>
网络爬虫的原理图
查看>>
Android 音视频深入 七 学习之路的总结和资料分享
查看>>
Linux的基本命令
查看>>
extjs 自定义控件
查看>>
BATJ面试必问:剖析Spring Cloud底层的工作原理
查看>>
使用SNMP4J获取OID
查看>>
电子商务都包括什么
查看>>
Spring Boot 数据库连接池参数
查看>>
【独家】K8S漏洞报告 | 近期bug fix解读
查看>>
yii2 左侧菜单子级无法高亮的问题
查看>>