网络编程,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. buffer java nio_Java NIO深入理解Buffer(缓冲区)

    前言 Github:https://github.com/yihonglei/java-all Project:java-nio 一 Buffer概述 Java NIO中的Buffer用于和NIO通道 ...

  2. java实现一个socks5代理 一了解nio Selector的基本用法

    上面浏览器可以放心的将数据交给代理了,接下来做的是怎样处理这些数据,以及面对浏览器突然过来的很多连接如何处理他们,这就要用到javax.nio包下的东西了,下面做简单介绍,不会nio可以先去学习下ni ...

  3. NIO:channel、buffer、状态变量、socket、charset

    在开始之前 关于本教程 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.通过定义包含数据的 ...

  4. Java NIO 编程:Buffer、Channel、Selector原理详解

    1 Java 中的 I/O模型:BIO.NIO.AIO 1.1 BIO.NIO.AIO概念介绍 I/O 模型简单的理解:就是 用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能. Ja ...

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

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

  6. NIO:与 Buffer 一起使用 Channel

    如前文所述,Channel实例代表了一个与设备的连接,通过它可以进行输入输出操作.实际上Channel的基本思想与我们见过的普通套接字非常相似.对于TCP协议,可以使用ServerSocketChan ...

  7. java 缓冲区中的数据存入缓冲区中_java8中NIO缓冲区(Buffer)的数据存储详解|chu...

    java8新特性NIO缓冲区(Buffer)的数据存储. ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer, Dou ...

  8. 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)

    1.世界 Java NIO之Buffer(缓冲区) Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从 ...

  9. Java NIO操作Socket的用法

    我们都知道TCP是面向连接的传输层协议,一个socket必定会有绑定一个连接,在普通的BIO(阻塞式IO)中,需要有三次握手,然后一般的socket编程就是这样的形式. Socket服务器端流程如下: ...

最新文章

  1. Adaboost算法原理以及matlab代码实现(超详细)
  2. 安装Xen Server创建虚拟机
  3. 在SAP云平台测试帐号中启用Kyma运行环境
  4. 方法性能分析器--装饰者模式应用
  5. Windows server 2012 之路由功能
  6. 其他脚本与 asp.net 脚本一起验证时容易出的问题
  7. 如何去掉Orcad Capture中元件标号下划线
  8. 五步法”判断自媒体创作好与坏的标准
  9. 如何从一台铅封计算机上取走数据
  10. EasyRecovery如何添加XML头文件标识
  11. JDK8-u271/u272的jre和jdk/jre的文件有差异
  12. 电脑PC端如何下载B站视频?
  13. ZXing源码解析四:如何识别图片中的二维码
  14. m基于迫零ZF准则的通信均衡器的matlab仿真
  15. 【爬虫实战】01利用python爬虫并进行数据分析(链家 爬虫)
  16. mac版源码编译安装mysql
  17. Andwobble破解
  18. 【生信】第一二三代测序技术原理的理解
  19. 怎么计算机求和错误的,《表格计算求和错误怎么办》 为什么EXCEL公式求和会有错误...
  20. 软考准备之系统开发与运行(错题及重要知识点)

热门文章

  1. 解决vmware报错:Mac OS X is not supported with binary translation.
  2. element-ui滚动条组件el-scrollbar
  3. 读jquery 权威指南[4]-Ajax
  4. Linux命令总结(之二)Find
  5. 数据科学家最常用的十种算法和方法
  6. docker专题(2):docker常用管理命令(下)
  7. 微信小程序WebSocket相关问题说明
  8. 性能为王:SQL标量子查询的优化案例分析
  9. Struts2文件上传与下载
  10. Word中MathType公式与LaTeX公式的转换