缓冲区ByteBuffer简单说明
说道 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简单说明相关推荐
- Java NIO学习篇之缓冲区ByteBuffer详解
定义: ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多.支持直接内存.是一个抽象类.子类实现是HeapByteBuffer(非直接缓冲区子类),Direc ...
- Java NIO 之 ByteBuffer()
2019独角兽企业重金招聘Python工程师标准>>> 名词解释 capacity : 容量,表示缓冲区中最大存储数据的容量.一旦声明不能改变. limit : 界限,表示缓冲区中可 ...
- Java NIO3:缓冲区Buffer
在上一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如 ...
- ByteBuffer使用之道
缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方法 allocate() 来分配缓冲区: ByteBuffer buffer = ByteBuffer.allocate(1024); ...
- java nio 客户端_Java网络编程:Netty框架学习(二)---Java NIO,实现简单的服务端客户端消息传输...
概述 上篇中已经讲到Java中的NIO类库,Java中也称New IO,类库的目标就是要让Java支持非阻塞IO,基于这个原因,更多的人喜欢称Java NIO为非阻塞IO(Non-Block IO), ...
- java堆缓冲区,Java NIO之Buffer(缓冲区)
Java NIO主要解决了Java IO的效率问题,解决此问题的思路之一是利用硬件和操作系统直接支持的缓冲区.虚拟内存.磁盘控制器直接读写等优化IO的手段:思路之二是提供新的编程架构使得单个线程可以控 ...
- 【Java NIO的深入研究1】缓冲区
缓冲区 传统的流和通道的对比 流 通道 慢 快 处理简单 处理复杂 单字节的传输 一块数据的传输 - Java.io.*已经重新写过 - 是对流的模拟 单向的 双向的 可直接访问 必须通过Buffer ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- ByteBuffer使用
一.ByteBuffer类非实例的方法 ByteBuffer类提供了4个静态工厂方法来获得ByteBuffer的实例: 1.ByteBuffer allocate(int capacity) //创建 ...
最新文章
- 【Matlab 图像】边缘检测算法及效果演示
- java.lang.NoSuchMethodError: antlr.collections.AST.g(truts2与hibernate jar包(antlr-2.7.2.jar)冲突)
- python模仿windows文件管理_python – 在Windows中显示文件的资源管理器属性对话框...
- 小透明学弟的华为上岸之路
- C#LeetCode刷题之#704-二分查找(Binary Search)
- 初学C++-----------------类的定义
- Java:jdk8中map新增的merge方法
- mysql存储过程的学习(mysql提高执行效率之进阶过程)
- paip.提升安全性--360,WI,AWVS三款WEB程序安全检测软件使用总结
- 2008.12.8希世软件杭州公司
- dwg格式转换pdf
- 搭建 IPv6 Web服务器
- 终于可以舒服的看电子书了
- 计算机维护与维修方法,浅谈计算机维护与维修方法
- 果糖SAAS开源社交电商小程序,全开源,无加密
- 【FFMPEG】H264码流的两种组织方式:AnnexB和AVCC
- linux panic 和 bug_on
- Uncaught ReferenceError: Mustache is not defined
- 超详细的实现上传文件功能教程,文件上传实现。
- QT pri 文件的作用