写模式:

  1. 创建Iobuffer实例,使用Iobuffer的static方法-allocate,有一个参数的方法或者两个参数,第一个参数capacity是指定创建的Iobuffer的容量的最大值,需要注意的是,首先capacity不能小于0,其次java并不是一次性就分配给该Iobuffer这么大的空间,而是根据缓冲区存储数据的实际情况动态分配。第二个参数direct是指定使用直接缓冲区还是java内存堆缓冲区(Boolean类型,默认是false,即默认使用堆缓冲区)。Allocate也支持自动扩充,setAutoExpand(),一般用于不确定会写入或接收多少数据。
  2. Clear和reset:两者的区别,clear时将limit放到最大容量处,游标位置position放到0,相当于重置标记,但是它不清空数据,比如写入前clear,写入数据完成之后position在数据末尾,limit在最大容量处,然后flip,limit会到之前position的位置,而position置为0,此时的缓冲区就可以正常读取数据了。reset的话一般和mark配对使用,可以将position重置到之前mark的位置。

读模式:

  1. Remaining:返回值是现在游标在的position到limit的差值,也就是剩下未读取的字节数。
  2. hasRemaining:返回值是boolean类型的,如果position小于limit,没到最大容量返回值为true,反之为false。
  3. 这两个一般是用在读里面的,但是在写里面也可以用,比如写的时候想知道我还有没有剩余空间,剩余多少。

其他:

  1. limit:在读模式的时候,其值放的数据的总量,在写模式的时候,其值是我们设置的最大容量。
  2. flip:模式翻转。这个用于写模式到读模式的转换,limit=position , position=0,重置mark,这是为了读取做好准备,一般是结束buff的写操作,将buff写入输出流时调用。读取的时候从position开始,如果忘记调用的话,实际上position后面并没有数据。如果从读模式到写模式用flip的话,position会被置为0,相当于清空,想接着读的位置继续写的话就不行了,如果有这种需求可以先把没读的东西放到一个Iobuffer副本中,把这个Iobuffer清空clear,然后再把副本put进去即可。在这里的清空操作用clear后时position=0,limit为最大容量处;如果清空用flip的话,limit=position,position=0,效果一样的,put完之后进行的flip都会将limit放到写完数据的position的位置。
  3. 简单说就是我们在buff中写完数据之后,position还停在我们写的数据的结尾处,limit还停在最打容量处,直接到输出流的话,无法读取数据,所以我们通过flip将limit转到position的位置,然后position放到0,这样才能正常读取。

Iobuffer的使用的更多相关文章

  1. MINA系列学习-IoBuffer

    在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...

  2. mina IoBuffer

    mina IoBuffer 常用方法   Limit(int) 如果position>limit, position = limit,如果mark>limit, 重置mark Mark() ...

  3. mina IoBuffer 常用方法

    Limit(int) 如果position>limit, position = limit,如果mark>limit, 重置mark Mark() 取当前的position的快照标记mar ...

  4. 【MINA】缓存区ByteBuffer和IOBuffer你要了解的常用知识

    mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足 1.没有提供足够灵活的get/putXXX方法 2.它容量固定,难以写入可变长度的数据 特点 ...

  5. Mina学习之IoBuffer

    IoBuffer是一个被MINA体系所使用的字节数组.它是ByteBuffer的替代品,Mina不使用NIO的ByteBuffer有两个原因: 1. ByteBuffer没有提供更多有用的api,如f ...

  6. Mina源码阅读笔记(二)- IoBuffer的封装

    在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...

  7. Mina的IoBuffer改造成Netty的ByteBuff

    背景:部标GPS通讯底层全部改造成基于Netty服务器实现的,现将Mina的依赖移除,修改过程中有用到缓冲区的读写.现做了如下修改: 原有基于Mina的IoBuffer对字节读写封装代码如下: pac ...

  8. Mina 组件介绍之 IoBuffer

    在Java NIO 中,ByteBuffer通常作为通信中传递消息的载体.而在Mina中,采用了IoBuffer代替ByteBuffer.Mina给出了不用ByteBuffer的两个主要理由: 1.  ...

  9. 搞懂iobuffer就得先学习bytebuffer

    ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来记录一下. ...

随机推荐

  1. day50:django:有名/无名分组&FBV/CBV

    目录 1.URL有名分组和无名分组 2.FBV和CBV URL有名分组和无名分组 有名分组 使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图 urls.py fr ...

  2. Linux内存子系统——Locking Pages(内存锁定)

    该部分内容可以参考libc man page 3.5 LockingPages 概述 你可以让系统将特定的虚拟内存页与实际页帧相"关联",并保持这样的状态(称为锁定).该部分内存不 ...

  3. Powershell编程基础-003-脚本的绝对路径及所在的目录

    在运行脚本的时候,有时候需要通过脚本文件所在目录路径来做一些事, 如脚本5201351.ps1脚本, 常规思路实现>>>>: 1.如果要获取这个脚本所在的绝对路径,可以使用内置 ...

  4. 微服务实战系列(四)-注册中心springcloud alibaba nacos

    1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...

  5. Docker:四、Docker进阶 Windows Docker IIS 部署

    前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...

  6. iOS14 debug安装的带有flutter应用从桌面图标重新启动时闪退

    刚刚升级遇到的问题,希望能够帮助到遇到相同问题的人. 用xcode12连接iOS设备调试安装应用 拔掉数据线 从桌面图标点击进入App必闪退 后来发现是flutter的原因,目前有下面两种个解决方案: ...

  7. 接口鉴权,提供给第三方调用的接口,进行sign签名

    //场景:公司要跟第三方公司合作,提供接口给对方对接,这样需要对接口进行授权,不然任何人都可以调我们公司的接口,会导致安全隐患: 思路: 在每个接口请求参数都带上ApiKey 和sign签名: 我们在 ...

  8. 中秋礼物!开源即时通信GGTalk安卓版全新源码!

    经过连续两个多月的努力(开发.调试.测试.改bug),我们终于赶在中秋国庆之前能把全新的GGTalk Android版本献给大家. 4年之前我们就推出了GGTalk Android的第一个版本,但是功 ...

  9. 学习git这一篇就够了!!!

    git命令操作 本地库操作 初始化本地仓库 初始化命令 git init $ work % cd workspace $ workspace % mkdir WebService //创建文件夹 $ ...

  10. PADS Layout VX.2.3 修改层名

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 点击菜单Setup > Layer Definition... 在Layers Setup窗口中,选择相应的 ...