【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。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5046135.html,如需转载请自行联系原作者


相关文章
|
9月前
|
存储 Java 容器
|
9月前
|
存储 Java
NIO之Buffer解读(下)
NIO之Buffer解读(下)
java Nio(二): Buffer(缓冲区)的数据存取
java Nio(二): Buffer(缓冲区)的数据存取
java Nio(二): Buffer(缓冲区)的数据存取
Java Nio (三):直接缓冲区 和 非直接缓冲区
Java Nio (三):直接缓冲区 和 非直接缓冲区
Java Nio (三):直接缓冲区 和 非直接缓冲区
|
Java
|
存储 缓存 Java
如何使用 Java 中 缓冲区类 Buffer
# 如何使用 Java 中 缓冲区类 Buffer ## 1. 什么是Buffer 缓冲区 缓冲区(Buffer):就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区 缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个数组,该对象提供了一组方法,可以更轻松地使用内存块 ## 2.Buffer及其常用子类 从 JDK1.4开始,提供使用Buffer类 ![image-20220502214516083](https://yygh-sz.oss-cn-beijing.aliyuncs.com/image-2022
116 0
|
存储 Java 容器
Java NIO 中的 Buffer 缓冲区详解(上)
Java NIO 中的 Buffer 缓冲区详解
346 0
Java NIO 中的 Buffer 缓冲区详解(上)
|
Java
Java NIO 中的 Buffer 缓冲区详解(下)
Java NIO 中的 Buffer 缓冲区详解
144 0
Java NIO 中的 Buffer 缓冲区详解(下)
|
存储 Java
Netty:NIO buffer 原理(附 示例代码)
Netty:NIO buffer 原理(附 示例代码)
Netty:NIO buffer 原理(附 示例代码)
|
Java API
【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )
【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )
138 0
【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )