vert.x中的buffer简介

时间:2021-11-14 18:06:42

本文之所以要对vert.x中的buffer做简介,主要是因为它对于vert.x来说很重要,例如当verticle要对http请求来的数据(data block)进行处理,或者将数据response给前端,都需要buffer来处理。

创建Buffer

可以通过Buffer接口的static方法buffer()创建一个Buffer对象

Buffer buffer = Buffer.buffer();

也可以在创建时传入byte[]数据参数

byte[] data = new byte[]{a,b,c};
Buffer buffer = Buffer.buffer(data);

还有可以通过传入字符串构造一个Buffer对象

Buffer buffer = Buffer.buffer("initial String");

还可以在传入字符串的时候指定编码

Buffer buffer = Buffer.buffer("initial data", "UTF-8");

上面的写法等同于

Buffer buffer = Buffer.buffer("initial data".getBytes("UTF-8"));

Buffer有length()方法可以获取它的长度。

写数据到Buffer

Buffer buffer = Buffer.buffer();

System.out.println("buffer.length() = " + buffer.length());

buffer.setByte ( 0, (byte) 127);
buffer.setShort ( 2, (short) 127);
buffer.setInt ( 4, 127);
buffer.setLong ( 8, 127);
buffer.setFloat (16, 127.0F);
buffer.setDouble(20, 127.0D);

System.out.println("buffer.length() = " + buffer.length());

往buffer中写入数据可以通过set…方式,buffer会自适应添加的多少变化长度。
也可以通过append()方法往buffer中添加数据

Buffer buffer = Buffer.buffer();

System.out.println("buffer.length() = " + buffer.length());

buffer.appendByte ((byte) 127);
buffer.appendShort ((short) 127);
buffer.appendInt ( 127);
buffer.appendLong ( 127);
buffer.appendFloat ( 127.0F);
buffer.appendDouble( 127.0D);

System.out.println("buffer.length() = " + buffer.length());

append()方法不需要索引(index)参数,它会添加数据到尾部,
上面两种方式添加完之后,打印的length并不相同,请读者自行体会。

从Buffer读数据

byte   aByte   = buffer.getByte  ( 0);
short aShort = buffer.getShort ( 2);
int anInt = buffer.getInt ( 4);
long aLong = buffer.getLong ( 8);
float aFloat = buffer.getFloat (16);
double aDouble = buffer.getDouble(20);

可以看到Buffer提供了很方便的数据操作方法。