Iobuffer的使用
写模式:
- 创建Iobuffer实例,使用Iobuffer的static方法-allocate,有一个参数的方法或者两个参数,第一个参数capacity是指定创建的Iobuffer的容量的最大值,需要注意的是,首先capacity不能小于0,其次java并不是一次性就分配给该Iobuffer这么大的空间,而是根据缓冲区存储数据的实际情况动态分配。第二个参数direct是指定使用直接缓冲区还是java内存堆缓冲区(Boolean类型,默认是false,即默认使用堆缓冲区)。Allocate也支持自动扩充,setAutoExpand(),一般用于不确定会写入或接收多少数据。
- Clear和reset:两者的区别,clear时将limit放到最大容量处,游标位置position放到0,相当于重置标记,但是它不清空数据,比如写入前clear,写入数据完成之后position在数据末尾,limit在最大容量处,然后flip,limit会到之前position的位置,而position置为0,此时的缓冲区就可以正常读取数据了。reset的话一般和mark配对使用,可以将position重置到之前mark的位置。
读模式:
- Remaining:返回值是现在游标在的position到limit的差值,也就是剩下未读取的字节数。
- hasRemaining:返回值是boolean类型的,如果position小于limit,没到最大容量返回值为true,反之为false。
- 这两个一般是用在读里面的,但是在写里面也可以用,比如写的时候想知道我还有没有剩余空间,剩余多少。
其他:
- limit:在读模式的时候,其值放的数据的总量,在写模式的时候,其值是我们设置的最大容量。
- 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的位置。
- 简单说就是我们在buff中写完数据之后,position还停在我们写的数据的结尾处,limit还停在最打容量处,直接到输出流的话,无法读取数据,所以我们通过flip将limit转到position的位置,然后position放到0,这样才能正常读取。
Iobuffer的使用的更多相关文章
- MINA系列学习-IoBuffer
在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...
- mina IoBuffer
mina IoBuffer 常用方法 Limit(int) 如果position>limit, position = limit,如果mark>limit, 重置mark Mark() ...
- mina IoBuffer 常用方法
Limit(int) 如果position>limit, position = limit,如果mark>limit, 重置mark Mark() 取当前的position的快照标记mar ...
- 【MINA】缓存区ByteBuffer和IOBuffer你要了解的常用知识
mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足 1.没有提供足够灵活的get/putXXX方法 2.它容量固定,难以写入可变长度的数据 特点 ...
- Mina学习之IoBuffer
IoBuffer是一个被MINA体系所使用的字节数组.它是ByteBuffer的替代品,Mina不使用NIO的ByteBuffer有两个原因: 1. ByteBuffer没有提供更多有用的api,如f ...
- Mina源码阅读笔记(二)- IoBuffer的封装
在阅读IoBuffer源码之前,我们先看Mina对IoBuffer的描述:A byte buffer used by MINA applications. This is a replacement ...
- Mina的IoBuffer改造成Netty的ByteBuff
背景:部标GPS通讯底层全部改造成基于Netty服务器实现的,现将Mina的依赖移除,修改过程中有用到缓冲区的读写.现做了如下修改: 原有基于Mina的IoBuffer对字节读写封装代码如下: pac ...
- Mina 组件介绍之 IoBuffer
在Java NIO 中,ByteBuffer通常作为通信中传递消息的载体.而在Mina中,采用了IoBuffer代替ByteBuffer.Mina给出了不用ByteBuffer的两个主要理由: 1. ...
- 搞懂iobuffer就得先学习bytebuffer
ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来记录一下. ...
随机推荐
- 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值
不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...
- Docker端口映射及创建镜像演示(二)
Docker暴露容器方法 第一种:将容器中的一个端口映射成宿主机中的一个随机端口 第二种:将容器中的一个端口映射成宿主机中的一个端口 第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口 ...
- 关于JAVA的一些零碎小知识
1.经常遇到集合之间需要互相转化的 Array和List转化:Arrays.asList(数组):list.toArray(); List和Set转化:Set<String> set = ...
- 使用jpa的注意事项
@Transactional 事务注解 nativeQuery = true表示使用写的sql,不是HQL@Modifying 注解完成修改操作使用jap时,在实体类的类名上面加上 @Entity@T ...
- React 服务端渲染方案完美的解决方案
最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...
- 中秋国庆8天挑战赛 之 挑战8天掌握微信小程序
中秋国庆8天挑战赛 挑战8天掌握微信小程序 当前学习进度: // 10.1// 学习内容:// 10.2// 学习内容:// 10.3// 学习内容:// 10.4// 学习内容:// ...
- 图像分辨率 像素 大小 LCD显示 为OLED屏增加GUI支持
1. 根据一张标准图片的分辨率,结合每个像素的大小,可以计算得到这张图片的大小(字节数) 补充点:bmp格式的图片有24色或者32色.(其一个像素点可能占用24bits或者32bits) 至于图片怎 ...
- 未能找到元素“appender”的架构信息
在App.config写入log4net的配置信息,然后错误列表就出现了一堆的消息提示. 未能找到元素"appender-ref"的架构信息 未能找到元素"appende ...
- 获取豆瓣读书所有热门标签并保存到mongodb数据库
目标url:https://book.douban.com/tag/?view=type&icn=index-sorttags-all 目的:抓取所有标签名称(tag_name),标签链接(t ...
- windows 漏洞列表
漏洞列表 #Security Bulletin #KB #Description #Operating System CVE-2017-0213 [Windows COM Eleva ...