buffer.flip()方法
buffer.flip()方法
简述
简言之,反转缓冲区写后读;用于buffer缓存对象内容填写后,转为读模式。(写进buffer后再flip(),可以读出buffer中的数据)
玩法
这东西的玩法,需要理解Buffer这抽象类,是可读写的API,他里面有四个关键的概念,position,limit,mark,capacity
中文就叫位置,限制,标记,容量,他们的关系0<=mark<=position<=limit<capacity;Buffer抽象类又有几个子类,包括ByteBuffer,CharBuffer等,当然这些家伙也是抽象类,不能实例化。查看他们的静态方法,获取对象:
allocate和allocateDiret,分配指定大小的数组
wrap静态方法,很明显,wrap方法传入就是一个数组,在数组的基础上,咱们开始看,
他们底层操作的实际上就是数组(直接分配内存的,情况比较复杂,这里知道底层是数组,就能理解flip方法了)。上面的几个参数,其实就是操作数组时标记,或者就是数组的标记。capacity可以理解为数组的大小,position就是读取或写入时的下标,limit就是执行当前读或者写的最大下标;所以很明显limit一定小于capacity,position肯定不能超过设定最大下标limit。还有一个mark,可以理解为一个备份点。使用reset()方法,就可以回到这个点(不深入讨论这个点,后面补充一个mark的)。
上面说过,他是可读写的。
例如先在数组中填写数据,在0,和1中已经填写了数据;position的下标已经是2了,position是指向读写位置的,如果直接去读取buffer的内容就是从2开始,实际上2后面就没有东西(有默认值,但不是存储的数据),这个时候,flip就有用了。flip的源码如下:
public final Buffer flip() {limit = position;position = 0;mark = -1;return this;}
首先把读取数据的最大下标设定为刚刚写的position的位置,然后position从头(0)开始,这样读取缓存的数据的时候,就会读取到刚刚写入的数据。
这就是buffer利用这四个特效,巧妙操作数组,实现读写能力。
buffer.flip()方法相关推荐
- java.nio.Buffer flip()方法
碰到java.nio.Buffer flip()方法,不明白是干什么用的,于是就赶快查看中文API,API上面翻译的是:"反转此缓冲区.首先对当前位置设置限制,然后将该位置设置为零.如果已定 ...
- Buffer flip()方法用法
Buffer既可以用来读和写.如下: public class NioTest {public static void main(String[] args) {// 分配内存大小为10的缓存区Int ...
- java rewind()_Java NIO Buffer的clear()、reset()、rewind()、flip()方法的区别
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类.capacity一旦初始化后就不会改变,其值一直为常量.在使用中我们一般使用Buffer的抽象子类 ...
- java.nio.Buffer 中的 flip()方法
在Java NIO编程中,对缓冲区操作常常需要使用 java.nio.Buffer中的 flip()方法. Buffer 中的 flip() 方法涉及到 Buffer 中的capacity.posi ...
- C# Buffer.BlockCopy方法详解
因工作需要,学习了C#方面的知识,看到Buffer.BlockCopy方法.从微软平台看到的解释第一时间没有看懂,感觉是其中的例子详解不充分.自己推理了一下,如下分享我自己的理解过程:(初学者欢迎查正 ...
- java flip方法_Python numpy.flip函数方法的使用
numpy.flip numpy.flip(m, axis=None) [source] 沿给定轴颠倒数组中元素的顺序. 数组的形状被保留,但是元素被重新排序. 1.12.0版中的新功能.参 ...
- 面试官:什么是NIO?NIO的原理是什么机制?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://blog.csdn.net/qq_36520 ...
- 什么是NIO?NIO的原理是什么机制?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 依本多情 来源 | https://blog. ...
- 【转】NIO的定义和原理是什么?
NIO和IO到底有什么区别?有什么关系? 首先说一下核心区别: NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的.所以在效率上的话,肯定是NIO效率比IO效率会高出很多. N ...
最新文章
- 【转】Android应用开发allowBackup敏感信息泄露的一点反思
- IdentityServer4 接口说明
- 经典的java程序_Java经典程序
- 三层架构与MVC的区别
- 第七篇:Spring Boot整合Thymeleaf_入门试炼02
- C++——random库中的uniform_int_distribution
- php7垃圾回收机制l_php5和php7垃圾回收上的区别是什么?
- POJ 2449 Remmarguts' Date
- 未来教育计算机二级答案19,2019年3月计算机二级MSOffice提分试题及答案019
- python3.6爬淘宝信息
- 新手怎样利用博客推广
- 差点被威金病毒搞死了……
- HDFS--Secondary NameNode
- 1756冗余_冗余电源1756-PA75R
- 【开发】后端框架——Mybatis
- 京东/淘宝的手机销售榜(前4名 -- 手机品牌 --手机型号*3 --手机分辨率 -- 手机操作系统 --安卓版本号)...
- 图解系统(六)——调度算法
- java判断工作日_java 查询指定月份的工作日(不包括法定节假日)
- 金蝶云星空与钉钉集成案例
- Spring Cloud Alibaba基础入门,一周学会基操!
热门文章
- android 如何在user版本中获取root权限
- Window 7下QT5.9.2安装、QTCreator调试器配置
- Promise 原理详解
- php逻运算符题目_php笔试试题
- 如何无需root卸载Android预装应用
- res.setHeader()和res.writeHead()
- html5跑分最强手机,HTML5跑分263 腾讯X5手机浏览器内核泄露
- OpenCV 【九】——calcHist ——图像直方图统计
- 五款电动车充电器原理图(重点图2分析过程UC3842的VCC启动电压和稳定供电电压说明,12V由稳压二极管得到做外围电源LM358比较器可被控制输出12V 和0V切换)UC3842电源管理芯片详解
- 昨天佛媛,今天病媛,媛媛不断,只有程序媛才是yyds!