Vert.x缓冲区

时间:2020-01-09 10:47:20  来源:igfitidea点击:

Vert.x中运行的顶点通常需要处理数据块。例如,来自传入的HTTP请求的数据,从磁盘加载的数据或者作为对HTTP请求的响应而生成的数据等。Vert.x提供了" Buffer"接口(" io.vertx.core.buffer.Buffer")来提供可以处理此类数据块。

Vert.x中的"缓冲区"可以保存二进制数据。因此,"缓冲区"类似于"字节"数组,只是"缓冲区"可以在我们向其写入数据时动态扩展其容量。

创建一个缓冲区

使用"缓冲区"接口中的静态"缓冲区()"方法可以创建"缓冲区"。这是创建Vert.xBuffer的样子:

Buffer buffer = Buffer.buffer();

我们也可以从一开始就其中包含一些数据的情况下创建一个"缓冲区"。这是创建"缓冲区"的方法,该"缓冲区"是使用"字节"数组中的字节初始化的:

byte[] initialData = new byte[]{1, 2, 3};

Buffer buffer2     = Buffer.buffer(initialData);

我们还可以使用字符串的内容初始化Buffer。这是创建一个初始化为String值的" Buffer"的示例:

Buffer buffer3 = Buffer.buffer("initial data");

如果我们希望使用特殊编码(例如UTF-8,UTF-16等)对存储在" Buffer"中的字节进行编码,则可以将编码指定为" buffer()"方法的第二个参数,例如: :

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

这等效于:

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

缓冲长度

我们可以使用length()方法读取`Buffer'的长度。这是一个例子:

Buffer buffer = Buffer.buffer();

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

写入缓冲区

我们可以使用set ...()方法之一写入缓冲区中的特定位置。这里有些例子:

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());

请注意,缓冲区的长度从0开始。然后,随着将数据写入其中,缓冲区将扩展以适合所需的大小。执行完上面的代码后,缓冲区的长度为28.

我们也可以使用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 ...()方法不需要索引作为参数。它们总是将数据添加到"缓冲区"的末尾。执行此代码后," Buffer"的长度将为27(因为第一个字节之后的所有数据都是从索引1插入的,而不是如先前示例中的索引2插入的)。

从缓冲区读取

我们可以使用许多get ...()方法读取存储在`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);