【NIO】dawn在buffer用法
网络编程,buffer它用于数据传输到网络上的集线器应用程序,不用说,一个重要的线。提到buffer我不能说什么零拷贝,buffer什么内存管理,在dawn在,基于directbuffer再次能够实现零拷贝自己主动延伸buffer。
内存块的链表。数据都是在尾端加入。从头部移出,或者在中间获取、设置。全部的位置信息都是直接通过计算获取,所以。保证了各种情况的存取效率。在数据添加时。假设当前内存不够,则会扩展一个内存块,写到新block中;假设前面的数据消费掉了,则能够使用compact方法,压缩存储空间,抛弃最前面已经消费掉的数据。并把抛弃掉的内存块放回内存池。这样就以最小的数据移动代价来获取最高的存取效率。
所以,仅仅要你以正确的姿势使用了dawn的buffer。你同一时候在高效的使用buffer了,dawn的底层尽了最大努力减少数据复制的开销。注意:ScalableDirectBuf的当前实现仅仅能支持intel和amd的cpu。在别的cpu上使用 ,可能会崩溃,只是现实生活中绝大部分的cpu都是intel的。所以,我们基本不用操心。
讲了半天的题外话,让我回到ScalableDirectBuf的用法上吧。ScalableBuf的最大容量是无限的,仅仅限制于物理内存,它有几个成员变量我们必须了解:
ri(readindex的缩写),wi(writeindex)。limitpos(当前容量)
ri是下一个可读数据的位置
wi是下一个可写位置
limitpos 是当前容量。
他们的大小关系:ri<=wi<=limitpos
ScalableDirectBuf有几类方法:
1.写入类方法,以w开头,比方wint是写入一个整数,wi向前移动4个字节,还有wbyte。wlong,等等,类似。
2.读取类方法。以r开头,如rlong,从buffer中读取一个long,ri向前移动8个字节。假设buffer的可读数据不足8个字节,会抛出IndexOutofBound异常。
3.设置方法,以s开头,比方sshort,从某个偏移開始,设置一个short数据,ri和wi都不移动。
4.获取方法。以g开头,比方gbyte,读取某个位置处的一个字节,ri和wi都不移动。
5.和容量有关的函数。readable,当前buffer中可供消费的数据大小。
6.和buffer回收相关的函数,compact。抛弃已经消费的数据,并把空block放回内存池。 release,抛弃全部数据。把全部block放回内存池。
相关的样例。能够參考单元測试:
https://github.com/zhmt/dawn/blob/master/examples/zhmt/dawn/nio/buffer/ScalableDirectBufTest.java
下一篇文章,我们用一个简单的样例来综合运用我们之前学到知识:我们连接baidu的首页,并打印所获取到全部内容,你会看到这非常easy。
【NIO】dawn在buffer用法的更多相关文章
- Java NIO中的Buffer 详解
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...
- NIO之缓冲区(Buffer)的数据存取
缓冲区(Buffer) 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道 ...
- Java NIO Channel和Buffer
Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...
- NIO(一):Buffer缓冲区
一.NIO与IO: IO: 一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...
- nio之缓冲区(Buffer)理解
一.缓冲区简介 Nio中的 Buffer 是用于存储特定基础类型的一个容器.为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性. 1. capaci ...
- Java I/O(3):NIO中的Buffer
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前在调用Channel的代码中,使用了一个名叫ByteBuffer类,它是Buffer的子类.这个叫Buffer的类是专门用来解决高速设备与低 ...
- Java NIO学习与记录(二):FileChannel与Buffer用法与说明
FileChannel与Buffer用法与说明 上一篇简单介绍了NIO,这一篇将介绍FileChannel结合Buffer的用法,主要介绍Buffer FileChannel的简单使用&Buf ...
- NIO编程中buffer对象的理解以及API的使用
概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html ,将的非常好! Buffer 类是 java.nio 的构造基 ...
- 6. 彤哥说netty系列之Java NIO核心组件之Buffer
--日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第六篇. 简介 上一章我们一起学习了Java NIO的核心组件Channel,它可以看作是实体与实体之间的连接,而且需要与Buffer交 ...
随机推荐
- 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据
原文:[ASP.NET Web API教程]5.2 发送HTML表单数据:URL编码的表单数据 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- perl lwp 获取请求头
<pre name="code" class="html">[root@dr-mysql01 ~]# cat getx.pl use LWP::Us ...
- hdu 4707 Pet 2013年ICPC热身赛A题 dfs水题
题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且 ...
- Android:通知栏的使用
非常久没有使用Android的通知功能了,今天把两年前的代码搬出来一看.发现非常多方法都废弃了,代码中各种删除线看的十分不爽.于是乎,打开Google,查看官方文档.学习最新的发送通知栏消息的方法. ...
- 网站教学 提纲总结到ajax结束后面还有
Repeater - 重复器五个模板:HeaderTemplate - 在最上面,显示一次FooterTemplate - 最下面,显示一次ItemTemplate - 在中间,显示n次Alterna ...
- Java实现敏感词过滤(转)
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- JSCapture实现屏幕捕捉
JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库. 能够随意在浏览器或者桌面视频进行截图, JSCapture 使用 getUserMedia 来实现屏幕捕获. 当前 ...
- [docker]coreOS与atomic对照
声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 摘自https://majo ...
- 虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Redis server的解决方案
今天在学些redis的时候碰到个问题,发现主机Redis Destop Manager不能访问虚拟机Redis server的解决方案,找了一些网上的资料,原因可能有两个,整理记录下来: 1. Red ...
- 有时候碰到String赋值就出错,原因有三
1. String所在的对象,根本就不存在(不是String不存在,而是它所属的类对象不存在) 2. 增加一个String作为类元素后,运行直接就崩溃.一次又一次找原因,结果发现,只需要完全重编译就行 ...