说道 ByteBuffer的缓冲区,就需要知道缓冲区的的三个状态

1)       capacity

即容量,也就是缓冲区的大小。它的值是在创建缓冲区的时候指定的,设定后无法对其进行修改。

2)      limit

读写限制:也就是缓冲区可以利用(进行读写)的范围的最大值,可以调用ByteBuffer对象的limit(int)方法进行设置,调用ByteBuffer对象的limit()获取缓冲区读写限制的大小;在刚开始创建缓冲区的时候limit的大小等于capacity。

3)      position

读写位置:表示当前进行读写操作时的位置,初始化为0,即缓冲区开始读或者写数据的位置。可以通过调用ByteBuffer对象的positon(int)方法设置它的值,通过position()可以获取它的值

这三个状态的数值满足一下关系:0=<position=<limit=<capacity

在初始化缓冲区的情况下,position=0;limit = capacity

缓冲区是通过put或者putXXX来向缓冲区添加数据,也可以通过put(index,vlaue)方法在指定的position和limit之间指定的地方添加数据;通过get()或者getXXX()来获取数据,也可以通过get(int  index)方法来获取position到limit之间指定的数据。

注意position的位置会随着数据的写入而移或者读取一个字节一个字节的移动(比如添加一个byte类型的数据position会+1,;添加一个int类型的数据position会+4;),直到position=limit为止。如果position==limit时,再添加数据会报java.nio.BufferOverflowException、再获取数据会报java.lang.IndexOutOfBoundsException。

正因为向缓冲区添加数据的时候写数据的时候position会变化,如果想获取缓冲区的数据直接调用get等相关方法获取数据是肯定不行的,因为此时数据在缓冲区存在数据的部分是0~~position之间,而读数据开始的位置position在此区间之外。所以要获取此区间的数据需要重新设置position的位置,ByteBuffer提供了一个filp方法,该方法主要进行两部操作

limit = position;(将limit设为当前position)

position =0;

此时通过get方法就可以获取到0到limit之间的数据了

可以参考http://my.oschina.net/flashsword/blog/159613

缓冲区ByteBuffer简单说明相关推荐

  1. Java NIO学习篇之缓冲区ByteBuffer详解

    定义: ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多.支持直接内存.是一个抽象类.子类实现是HeapByteBuffer(非直接缓冲区子类),Direc ...

  2. Java NIO 之 ByteBuffer()

    2019独角兽企业重金招聘Python工程师标准>>> 名词解释 capacity : 容量,表示缓冲区中最大存储数据的容量.一旦声明不能改变. limit : 界限,表示缓冲区中可 ...

  3. Java NIO3:缓冲区Buffer

    在上一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如 ...

  4. ByteBuffer使用之道

     缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方法 allocate() 来分配缓冲区: ByteBuffer buffer = ByteBuffer.allocate(1024); ...

  5. java nio 客户端_Java网络编程:Netty框架学习(二)---Java NIO,实现简单的服务端客户端消息传输...

    概述 上篇中已经讲到Java中的NIO类库,Java中也称New IO,类库的目标就是要让Java支持非阻塞IO,基于这个原因,更多的人喜欢称Java NIO为非阻塞IO(Non-Block IO), ...

  6. java堆缓冲区,Java NIO之Buffer(缓冲区)

    Java NIO主要解决了Java IO的效率问题,解决此问题的思路之一是利用硬件和操作系统直接支持的缓冲区.虚拟内存.磁盘控制器直接读写等优化IO的手段:思路之二是提供新的编程架构使得单个线程可以控 ...

  7. 【Java NIO的深入研究1】缓冲区

    缓冲区 传统的流和通道的对比 流 通道 慢 快 处理简单 处理复杂 单字节的传输 一块数据的传输 - Java.io.*已经重新写过 - 是对流的模拟 单向的 双向的 可直接访问 必须通过Buffer ...

  8. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  9. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  10. ByteBuffer使用

    一.ByteBuffer类非实例的方法 ByteBuffer类提供了4个静态工厂方法来获得ByteBuffer的实例: 1.ByteBuffer allocate(int capacity) //创建 ...

最新文章

  1. 【Matlab 图像】边缘检测算法及效果演示
  2. java.lang.NoSuchMethodError: antlr.collections.AST.g(truts2与hibernate jar包(antlr-2.7.2.jar)冲突)
  3. python模仿windows文件管理_python – 在Windows中显示文件的资源管理器属性对话框...
  4. 小透明学弟的华为上岸之路
  5. C#LeetCode刷题之#704-二分查找(Binary Search)
  6. 初学C++-----------------类的定义
  7. Java:jdk8中map新增的merge方法
  8. mysql存储过程的学习(mysql提高执行效率之进阶过程)
  9. paip.提升安全性--360,WI,AWVS三款WEB程序安全检测软件使用总结
  10. 2008.12.8希世软件杭州公司
  11. dwg格式转换pdf
  12. 搭建 IPv6 Web服务器
  13. 终于可以舒服的看电子书了
  14. 计算机维护与维修方法,浅谈计算机维护与维修方法
  15. 果糖SAAS开源社交电商小程序,全开源,无加密
  16. 【FFMPEG】H264码流的两种组织方式:AnnexB和AVCC
  17. linux panic 和 bug_on
  18. Uncaught ReferenceError: Mustache is not defined
  19. 超详细的实现上传文件功能教程,文件上传实现。
  20. QT pri 文件的作用

热门文章

  1. Java:电脑安装多版本jdk并切换版本
  2. JetBrains:webstrom无法识别就require方法
  3. html5图片动且平移,HTML5 Canvas平移,放缩,旋转演示
  4. tensorflow中获取shape的方法比较
  5. 编译原理文法等价变换
  6. EFM (Explicit Factor Models)显因子模型
  7. leetcode之每日温度
  8. 一张图超过了屏幕大小 如何自动将多出部分隐藏 只显示中间部分
  9. CodeForces 148D-Bag of mice(概率dp)
  10. 在控制用' * '台画一个圆形图案