1、是缓冲区工具类
作为Netty具体的缓冲区/数据容器,提供的常用方法如下
区别于NIO的ByteBuffer
通过给定的数据和字符返回一个Bytebuf对象
public static ByteBuf copiedBuffer(CharSequence string,Charset charset)
2、内部细节
ByteBuf内部维持了三个变量,一个是readerIndex/读数据的指针,一个是writerIndex/写数据的指针,一个是capacity/容量大小
3、实战分析
- 代码1
package buf;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
public class NettyByteBuf {
public static void main(String[] args) {
//创建一个ByteBuf,设置capacity为10
ByteBuf byteBuf = Unpooled.buffer(10);
//写入数据,readerIndex随着写入变化
for(int i = 0;i < 10;i++){
byteBuf.writeByte(i);
}
//使用getByte()方法时,readerIndex不变化
for(int i = 0;i < byteBuf.capacity();i++){
System.out.println(byteBuf.getByte(i));
}
//使用readByte()方法时,readerIndex变化
for(int i = 0;i < byteBuf.capacity();i++){
System.out.println(byteBuf.readByte());
}
}
}
- 代码2
package buf;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.nio.charset.Charset;
public class NettyByteBuf_2 {
public static void main(String[] args) {
//首先使用新的方式创建ByteBuf
ByteBuf byteBuf = Unpooled.copiedBuffer("hello 打工人", Charset.forName("utf-8"));
//使用相关的方法
if(byteBuf.hasArray()){
byte[] content = byteBuf.array();
//将content转换成字符串
System.out.println(new String(content, Charset .forName("utf-8")));
System.out.println("byteBuf:"+byteBuf);
//可以使用writeindex和readerIndex方法查看当前坐标
//for循环取出各个字符
}
}
}
4564



被折叠的 条评论
为什么被折叠?



