栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Netty Java从ByteBuf获取数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()
,因为:

  • 并非所有人
    ByteBuf
    都有支持数组。一些是堆外缓冲区(即直接内存)
  • 即使a
    ByteBuf
    具有支持数组(即
    buf.hasArray()
    return
    true
    ),也不一定要满足以下条件,因为该缓冲区可能是其他缓冲区或池化缓冲区的一部分:
    • buf.array()[0] == buf.getByte(0)
    • buf.array().length == buf.capacity()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号