网络编程,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用法的更多相关文章

  1. Java NIO中的Buffer 详解

    Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...

  2. NIO之缓冲区(Buffer)的数据存取

    缓冲区(Buffer) 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道 ...

  3. Java NIO Channel和Buffer

    Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...

  4. NIO(一):Buffer缓冲区

    一.NIO与IO: IO:  一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...

  5. nio之缓冲区(Buffer)理解

    一.缓冲区简介 Nio中的 Buffer 是用于存储特定基础类型的一个容器.为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性. 1. capaci ...

  6. Java I/O(3):NIO中的Buffer

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前在调用Channel的代码中,使用了一个名叫ByteBuffer类,它是Buffer的子类.这个叫Buffer的类是专门用来解决高速设备与低 ...

  7. Java NIO学习与记录(二):FileChannel与Buffer用法与说明

    FileChannel与Buffer用法与说明 上一篇简单介绍了NIO,这一篇将介绍FileChannel结合Buffer的用法,主要介绍Buffer FileChannel的简单使用&Buf ...

  8. NIO编程中buffer对象的理解以及API的使用

    概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html  ,将的非常好! Buffer 类是 java.nio 的构造基 ...

  9. 6. 彤哥说netty系列之Java NIO核心组件之Buffer

    --日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第六篇. 简介 上一章我们一起学习了Java NIO的核心组件Channel,它可以看作是实体与实体之间的连接,而且需要与Buffer交 ...

随机推荐

  1. 福州大学第十届校赛 & fzu 2128最长子串

    思路: 对于每个子串,求出 母串中 所有该子串 的 开始和结束位置,保存在 mark数组中,求完所有子串后,对mark数组按 结束位置排序,然后 用后一个的结束位置 减去 前一个的 开始 位置 再 减 ...

  2. Vue ES6

    Vue ES6 Jade Scss Webpack Gulp   一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:“首先是 ...

  3. [Android学习笔记]Fragment使用

    一.android.app.Fragment 与 android.support.v4.app.Fragment 区别 support.v4.app.Fragment是为了给低版本Android使用的 ...

  4. 与众不同 windows phone (19) - Device(设备)之陀螺仪传感器, Motion API

    原文:与众不同 windows phone (19) - Device(设备)之陀螺仪传感器, Motion API [索引页][源码下载] 与众不同 windows phone (19) - Dev ...

  5. 不是技术牛人,如何拿到国内IT巨头的Offer(转)

    不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic…在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技术屌 ...

  6. PAIP: Paradigms of Artificial Intelligence Programming

    PAIP: Paradigms of Artificial Intelligence Programming PAIP: Paradigms of Artificial Intelligence Pr ...

  7. boost 的函数式编程库 Phoenix入门学习

    这篇文章是我学习boost phoenix的总结. 序言 Phoenix是一个C++的函数式编程(function programming)库.Phoenix的函数式编程是构建在函数对象上的.因此,了 ...

  8. javascript 下拉列表 自己主动取值 无需value

    <select id="applyType" name="$!{status.expression}" class="inp" onc ...

  9. Mybatis自己主动生成代码

    在mybatis自己主动生成代码有两种方式: 方式一:是通过使用eclipse作为开发工具.採用maven来构建项目生成的.以下的演示是通过第一种方式. 今天来记录下mybatis-generator ...

  10. Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)

    原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip   --> 将其下的 \ ...