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()方法相关推荐

  1. java.nio.Buffer flip()方法

    碰到java.nio.Buffer flip()方法,不明白是干什么用的,于是就赶快查看中文API,API上面翻译的是:"反转此缓冲区.首先对当前位置设置限制,然后将该位置设置为零.如果已定 ...

  2. Buffer flip()方法用法

    Buffer既可以用来读和写.如下: public class NioTest {public static void main(String[] args) {// 分配内存大小为10的缓存区Int ...

  3. java rewind()_Java NIO Buffer的clear()、reset()、rewind()、flip()方法的区别

    Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类.capacity一旦初始化后就不会改变,其值一直为常量.在使用中我们一般使用Buffer的抽象子类 ...

  4. java.nio.Buffer 中的 flip()方法

    在Java NIO编程中,对缓冲区操作常常需要使用  java.nio.Buffer中的 flip()方法. Buffer 中的 flip() 方法涉及到 Buffer 中的capacity.posi ...

  5. C# Buffer.BlockCopy方法详解

    因工作需要,学习了C#方面的知识,看到Buffer.BlockCopy方法.从微软平台看到的解释第一时间没有看懂,感觉是其中的例子详解不充分.自己推理了一下,如下分享我自己的理解过程:(初学者欢迎查正 ...

  6. java flip方法_Python numpy.flip函数方法的使用

    numpy.flip numpy.flip(m, axis=None)      [source] 沿给定轴颠倒数组中元素的顺序. 数组的形状被保留,但是元素被重新排序. 1.12.0版中的新功能.参 ...

  7. 面试官:什么是NIO?NIO的原理是什么机制?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://blog.csdn.net/qq_36520 ...

  8. 什么是NIO?NIO的原理是什么机制?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 依本多情 来源 | https://blog. ...

  9. 【转】NIO的定义和原理是什么?

    NIO和IO到底有什么区别?有什么关系? 首先说一下核心区别: NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的.所以在效率上的话,肯定是NIO效率比IO效率会高出很多. N ...

最新文章

  1. 【转】Android应用开发allowBackup敏感信息泄露的一点反思
  2. IdentityServer4 接口说明
  3. 经典的java程序_Java经典程序
  4. 三层架构与MVC的区别
  5. 第七篇:Spring Boot整合Thymeleaf_入门试炼02
  6. C++——random库中的uniform_int_distribution
  7. php7垃圾回收机制l_php5和php7垃圾回收上的区别是什么?
  8. POJ 2449 Remmarguts' Date
  9. 未来教育计算机二级答案19,2019年3月计算机二级MSOffice提分试题及答案019
  10. python3.6爬淘宝信息
  11. 新手怎样利用博客推广
  12. 差点被威金病毒搞死了……
  13. HDFS--Secondary NameNode
  14. 1756冗余_冗余电源1756-PA75R
  15. 【开发】后端框架——Mybatis
  16. 京东/淘宝的手机销售榜(前4名 -- 手机品牌 --手机型号*3 --手机分辨率 -- 手机操作系统 --安卓版本号)...
  17. 图解系统(六)——调度算法
  18. java判断工作日_java 查询指定月份的工作日(不包括法定节假日)
  19. 金蝶云星空与钉钉集成案例
  20. Spring Cloud Alibaba基础入门,一周学会基操!

热门文章

  1. android 如何在user版本中获取root权限
  2. Window 7下QT5.9.2安装、QTCreator调试器配置
  3. Promise 原理详解
  4. php逻运算符题目_php笔试试题
  5. 如何无需root卸载Android预装应用
  6. res.setHeader()和res.writeHead()
  7. html5跑分最强手机,HTML5跑分263 腾讯X5手机浏览器内核泄露
  8. OpenCV 【九】——calcHist ——图像直方图统计
  9. 五款电动车充电器原理图(重点图2分析过程UC3842的VCC启动电压和稳定供电电压说明,12V由稳压二极管得到做外围电源LM358比较器可被控制输出12V 和0V切换)UC3842电源管理芯片详解
  10. 昨天佛媛,今天病媛,媛媛不断,只有程序媛才是yyds!