写模式:

  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. C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量

    接上一篇文章,当我们可以绘制图形标记后,就可以在此操作类上面进行扩展, 比如测量类工具,目前整理出的常用绘图和测量功能如下: 测量工具类:(图形标记类请参考本系列文章:绘图处理之图形标记) 功能 说明 ...

  2. 云计算openstack核心组件——keystone身份认证服务(5)

    一.Keystone介绍:       keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户 ...

  3. 处理IOS浏览器在input或者textarea获取焦点后底部留一块灰色空白区域的bug

    document.body.addEventListener('focusout',function() { window.scrollTo(0,0) },false);

  4. vue中axios的使用

    新开了一个vue项目,从头到尾都是一个人做的,所以就自己配置了一个axios.js文件 第一种方法.使用axios 需要下载安装   npm install axios,下载完成之后 在main.js ...

  5. Elasticsearch(1):基础入门

      1 Elasticsearch¶   在如今数据为王的时代,如何充分高效实现数据检索和分析是数据应用的关键.以电商平台为例,输入一个商品名称,那么就要求系统以最快的速度将所有相关的商品搜索处理.现 ...

  6. Python爬虫练习:爬取800多所大学学校排名、星级等

    前言 国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八 时隔五年,"双一流"大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人的 ...

  7. Gradle系列之从零搭建Maven私服库

    原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇文章学习了 Gradle 相关知识,Gradle 系列文章如下: Gradle系列之初识Gradle Gradle之Groovy基础篇 ...

  8. 关于KeePass基于csv格式的批量导入与导出

    在KeePass的导出选项中,有一个KeePass CSV(1.x),导出后格式如下: "Account","Login Name","Passwor ...

  9. 几个超级实用但很少人知道的 VS 技巧[更新]

    大家好,今天分享一些实用的 VS 技巧,而这些技巧我发现很多人都不知道.因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS "骚"操作,他们 ...

  10. BUUCTF[归纳]sql注入相关题目

    这是我自己对于sql注入的部分ctf题型的归纳,均来自buuctf的平台环境. [0CTF 2016]piapiapia 我尝试了几种payload,发现有两种情况. 第一种:Invalid user ...