bytebuf池_Netty java从ByteBuf获取数据

ByteBuf buf = ...

byte[] bytes = new byte[buf.readableBytes()];

buf.readBytes(bytes);

如果您不希望readerIndex更改:

ByteBuf buf = ...

byte[] bytes = new byte[buf.readableBytes()];

int readerIndex = buf.readerIndex();

buf.getBytes(readerIndex, bytes);

如果要最小化内存副本,可以使用ByteBuf的后备数组(如果可用):

ByteBuf buf = ...

byte[] bytes;

int offset;

int length = buf.readableBytes();

if (buf.hasArray()) {

bytes = buf.array();

offset = buf.arrayOffset();

} else {

bytes = new byte[length];

buf.getBytes(buf.readerIndex(), bytes);

offset = 0;

}

请注意,您不能简单地使用buf.array(),因为:

>并不是所有的ByteBufs都有后备数组.一些是堆栈内缓冲器(即直接存储器)

>即使一个ByteBuf有一个后备数组(即buf.hasArray()返回true),以下不一定是真的,因为缓冲区可能是其他缓冲区或池缓冲区的一个切片:

> buf.array()[0] == buf.getByte(0)> buf.array().length == buf.capacity()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值