ByteBuf buf = Unpooled.copiedBuffer("Netty in Action rocks!", utf8);
//创建该 ByteBuf 从索引 0 开始到索引 15结束的一个新切片
ByteBuf sliced = buf.slice(0, 15);
//将打印“Netty in Action”
System.out.println(sliced.toString(utf8));
//更新索引 0 处的字节
buf.setByte(0, (byte)'J');
//将会成功,因为数据是共享的,对其中一个所做的更改对另外一个也是可见的
assert buf.getByte(0) == sliced.getByte(0);
复制代码
2、利用副本切片来操作 ByteBuf 的一个分段
Charset utf8 = Charset.forName("UTF-8");
//创建 ByteBuf 以保存所提供的字符串的字节
ByteBuf buf = Unpooled.copiedBuffer("Netty in Action rocks!", utf8);
//创建该 ByteBuf 从索引 0 开始到索引 15结束的分段的副本
ByteBuf copy = buf.copy(0, 15);
//将打印“Netty in Action”
System.out.println(copy.toString(utf8));
////更新索引 0 处的字节
buf.setByte(0, (byte) 'J');
//将会失败,因为数据不是共享的
assert buf.getByte(0) != copy.getByte(0);
复制代码
4.9 读/写操作
正如我们所提到过的,有两种类别的读/写操作:
get()和 set()操作,从给定的索引开始,并且保持索引不变;
read()和 write()操作,从给定的索引开始,并且会根据已经访问过的字节数对索引进行调整。
下面是部分常用的get()方法:
名 称描 述getBoolean(int)返回给定索引处的 Boolean 值getByte(int)返回给定索引处的字节getUnsignedByte(int)将给定索引处的无符号字节值作为 short 返回getMedium(int)返回给定索引处的 24 位的中等 int 值getUnsignedMedium(int)返回给定索引处的无符号的 24 位的中等 int 值getInt(int)返回给定索引处的 int 值getUnsignedInt(int)将给定索引处的无符号 int 值作为 long 返回getLong(int)返回给定索引处的 long 值getShort(int)返回给定索引处的 short 值getUnsignedShort(int)将给定索引处的无符号 short 值作为 int 返回getBytes(int, ...)将该缓冲区中从给定索引开始的数据传送到指定的目的地下面是部分常用的set()方法:
名 称描 述setBoolean(int, boolean)设定给定索引处的 Boolean 值setByte(int index, int value)设定给定索引处的字节值setMedium(int index, int value)设定给定索引处的 24 位的中等 int 值setInt(int index, int value)设定给定索引处的 int 值setLong(int index, long value)设定给定索引处的 long 值setShort(int index, int value)设定给定索引处的 short 值get()和 set()方法的用法大家可以参照下面的例子:
Charset utf8 = Charset.forName("UTF-8");
//创建一个新的 ByteBuf以保存给定字符串的字节
ByteBuf buf = Unpooled.copiedBuffer("Netty in Action rocks!", utf8);