Vert.x缓冲区
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);