写模式:

  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. 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值

    不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...

  2. Docker端口映射及创建镜像演示(二)

    Docker暴露容器方法 第一种:将容器中的一个端口映射成宿主机中的一个随机端口 第二种:将容器中的一个端口映射成宿主机中的一个端口 第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口 ...

  3. 关于JAVA的一些零碎小知识

    1.经常遇到集合之间需要互相转化的 Array和List转化:Arrays.asList(数组):list.toArray(); List和Set转化:Set<String> set = ...

  4. 使用jpa的注意事项

    @Transactional 事务注解 nativeQuery = true表示使用写的sql,不是HQL@Modifying 注解完成修改操作使用jap时,在实体类的类名上面加上 @Entity@T ...

  5. React 服务端渲染方案完美的解决方案

    最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...

  6. 中秋国庆8天挑战赛 之 挑战8天掌握微信小程序

    中秋国庆8天挑战赛 挑战8天掌握微信小程序 当前学习进度: // 10.1​// 学习内容:​// 10.2​// 学习内容:​// 10.3​// 学习内容:​// 10.4​// 学习内容:​// ...

  7. 图像分辨率 像素 大小 LCD显示 为OLED屏增加GUI支持

    1. 根据一张标准图片的分辨率,结合每个像素的大小,可以计算得到这张图片的大小(字节数) 补充点:bmp格式的图片有24色或者32色.(其一个像素点可能占用24bits或者32bits)  至于图片怎 ...

  8. 未能找到元素“appender”的架构信息

    在App.config写入log4net的配置信息,然后错误列表就出现了一堆的消息提示. 未能找到元素"appender-ref"的架构信息 未能找到元素"appende ...

  9. 获取豆瓣读书所有热门标签并保存到mongodb数据库

    目标url:https://book.douban.com/tag/?view=type&icn=index-sorttags-all 目的:抓取所有标签名称(tag_name),标签链接(t ...

  10. windows 漏洞列表

    漏洞列表 #Security Bulletin   #KB     #Description    #Operating System CVE-2017-0213 [Windows COM Eleva ...