本文之所以要对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提供了很方便的数据操作方法。