Bytebuf 是Unpooled类中的对象,Unpooled是Netty提供的一个专门用于操作Netty数据容器的工具类
Bytebuf
创建一个Bytebuf对象,该对象包含一个byte[] 数组,在Netty的ByteBuf中不需要使用lip进行反转,也可完成读写操作
Bytebuf使用了readIndex和writeIndex保存读取和写入的索引
/**
* 创建一个ByteBuf
*/
ByteBuf buffer = Unpooled.buffer();
for (int i = 0; i < 10; i++) {
buffer.writeByte(i);
}
// 输出
for (int i = 0; i < buffer.capacity(); i++) {
System.out.println(buffer.readByte());
}
维护了readIndex、writeIndex和capacity三个变量,整个过程将Bytebuf分成了三个部分
0 - readerIndex:为已经读取的区域
readIndex - readIndex:为可读取的区域
readIndex - capacity:为可写的区域
ButeBuf的常用方法
package com.gxd.netty.buf;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.nio.charset.Charset;
public class NettyByteBuf02 {
public static void main(String[] args) {
// 创建一个ByteBuf
ByteBuf byteBuf = Unpooled.copiedBuffer("hello,world!", Charset.forName("utf-8"));
// 常用方法
/**
* 判断buffer是否含有数组
*/
if (byteBuf.hasArray()) {
byte[] array = byteBuf.array();
// 重新将content转成字符串
System.out.println(new String(array, Charset.forName("utf-8")));
// 输出偏移量
System.out.println(byteBuf.arrayOffset()); // 0
// 读索引
System.out.println(byteBuf.readerIndex()); // 0
// 写索引
System.out.println(byteBuf.writerIndex()); // 12
// 容量
System.out.println(byteBuf.capacity()); // 36
// 读出的数据
System.out.println(byteBuf.readByte()); // 104(h)
// 可读字节数
int len = byteBuf.readableBytes();
System.out.println(len); //11
// for循环取出其中的每一个字节
for (int i = 0; i < len; i++) {
System.out.println((char) byteBuf.getByte(i));
}
// 读取buf中的某一段 从那个索引开始读几个
System.out.println(byteBuf.getCharSequence(0,4, Charset.forName("utf-8")));
}
}
}