Vert.x 内核模块 Buffer( 四 )

缓存器

在Vert.x中大多数数据会转换成缓存器。一个缓存器是零个或多个字节的序列,这个序可以被读写,并且在需要的时候自动扩展容纳写入的字节。可以将缓存器想象成一个智能字节数组。

创建缓存器

使用其中之一Buffer.buffer静态方法创建缓存器。缓存器可以以字符串,字节数组初始化,或创建空缓存器。

下面有一些创建缓存器的例子:

创一个空缓存器的例子:

Bufferbuff = Buffer.buffer();

从字符串创建缓存器。字符将使用UTF-8编码进缓存器。

Bufferbuff = Buffer.buffer("some string");

从字符串创建缓存器:字符串可以使用指定的编码方式编码进缓存器,例如:

Bufferbuff = Buffer.buffer("some string", "UTF-16");

从字节数组创建缓存器:

byte[]bytes = new byte[] {1, 3, 5};

Bufferbuff = Buffer.buffer(bytes);

创建一个初始始大小的缓存器。如知道写入数据的特定数量,则可以创建指定大小的缓存器。这使得缓存器在初始化时定位足够的内存空间,这比缓存器被写入时自动多次扩展空间要有效得多。注意,这种方式创建的缓存器是空的,Vert.x创建填充值为零的到指定大小的缓存器。

Bufferbuff = Buffer.buffer(10000);

向缓存器写

有两个方 法向缓存器写:appending,和随机访问。这两种情况缓存器总是自动扩展和压缩字节。这样就不会得到IndexOutOfBoundsException异常。

向缓存器追加

为了几缓存器追加数以后在,可以调用以append开头的方法。Append开头的方法可向缓存器中追加不同类型数据。Append开头的方法返加缓存器自身,所以可以链式调用:

Bufferbuff = Buffer.buffer();

buff.appendInt(123).appendString("hello\n");

socket.write(buff);

随机访问缓存器写入

通过使用setXXX类似方法,可以在指定的索引位置向缓存器写入。存在不同类型的set方法。所有set方法的第一个参数都是索引,索引代表在缓存器中的开始写数据的位置。只要需要缓存器总是自动扩展以容纳数据。

Bufferbuff = Buffer.buffer();

buff.setInt(1000,123);

buff.setString(0,"hello");

从缓存器中读取数据

使用getXXX方法从缓存器中读取数据。有多种数据类型的Get方法。Get方法的第一个参数是从缓存器中获取数据的索引值。

Bufferbuff = Buffer.buffer();

for (inti = 0; i < buff.length(); i += 4) {

  System.out.println("int value at "+ i + " is " + buff.getInt(i));

}

与无符号数字工作

无符号数值可能通过getUnsignedXX,appendUnsignedXX,setUnsignedXXX方法读取,追加和设置。这在实现优化消费带宽网络协议的编解码器是有用的。在下面的例子中,值200的一个字节将被设置到指定置:

Bufferbuff = Buffer.buffer(128);

int pos =15;

buff.setUnsignedByte(pos,(short) 200);

System.out.println(buff.getUnsignedByte(pos));

终端显示’200’.

缓存器长度

调用length方法获取缓存器的长度。缓存的长度是缓存器的最大索引加一。

复制缓存器

调用copy方法进行缓存器复制。

缓存器切片

一个切片缓存器是源缓存器的一个新缓存器,例如copy方法不复制底层数据。使用slice方法创建一个切片缓存器。

缓存器重用

针对一个Socket编写的缓存器,在差不多相同的地方可以重用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值