Buffers
在Vert.x中进行数据传播的大多是org.vertx.java.core.buffer.Buffer实例
Buffer表示的是一个字节序列(size >= 0), 可以向Buffer写入或者读取数据, 当写入数据时,超过其容量最大值时,会自动拓容。
Creating buffers
我们可以直接使用一系列Buffer.buffer开头的静态方法来创建一个Buffer.
Buffer可以从String或者byte arrays进行初始化,当然我们也可以直接创建出一个空Buffer.
下面给出了一些创建Buffer的示例:
创建一个内容为空的Buffer
Buffer buff = Buffer.buffer();
创建一个Buffer,并使用String进行初始化,在Buffer内部该字符串会使用UTF-8进行编码
Buffer buff = Buffer.buffer("some string");
创建一个Buffer,并使用String进行初始化,在Buffer内部该字符串会使用指定的编码方法进行编码
Buffer buff = Buffer.buffer("some string", "UTF-16");
创建一个Buffer,并使用byte[]进行初始化
byte[] bytes = new byte[] {1, 3, 5};Buffer buff = Buffer.buffer(bytes);
我们还可以在创建Buffer时指定其初始化大小。如果你能确定向Buffer写入数据的大小,那么你可以在创建Buffer指定其初始化大小。当Buffer创建成功之后,Buffer就会被分配出所指定的内存,一般来说这种方式适用于你的Buffer在不断地自动拓容的情况下。
需要注意的是,使用指定大小的方式创建一个Buffer,它本身是空的,只是分配了那么多内存而已。它并不会使用0来填充整个Buffer。
Buffer buff = Buffer.buffer(10000);
Writing to a Buffer
有俩种方式向Buffer中添加数据:appending和random access. 不管使用哪种方式,Buffer都会当容量不足时进行自动拓容。
Appending to a Buffer
Buffer提供了多种append方法,向Buffer中追加不同类型的数据。而且append方法返回的都是Buffer自身,因此我们可以使用链式调用append方法
Buffer buff = Buffer.buffer();buff.appendInt(123).appendString("hello\n");socket.write(buff);
Random access buffer writes
你也可以通过一系列set方法在某个合法的索引位置上写入数据。在set方法中第一个参数是要开始写入数据的索引位置,第二个参数是要写入的数据
Buffer buff = Buffer.buffer();buff.setInt(1000, 123);buff.setString(0, "hello");
Reading from a Buffer
我们通过一系列get方法从Buffer中读取数据,第一个参数是要开始读取的索引位置。
Buffer buff = Buffer.buffer();for (int i = 0; i < buff.length(); i += 4) {System.out.println("int value at " + i + " is " + buff.getInt(i));}
Buffer length
使用length方法来获得Buffer的长度, length的取值方式是最大的索引值+1
Copying buffers
使用copy可以直接对Buffer进行数据拷贝
拷贝之后的俩个
Buffer是否使用同一个缓冲区
Slicing buffers
我们使用slice方法创建一个sliced buffer,它与原Buffer共享一个数据缓冲区。
Buffer re-use
当Buffer被写入到socket中,或者其他的一些类似的地方,他们就不能被复用了
