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()
bytebuf池_Netty java从ByteBuf获取数据相关推荐
- bytebuf池_netty中的ByteBuf
网络数据的基本单位总是字节.Java NIO 提供了 ByteBuffer 作为它 的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐. Netty 的 ByteBuffer 替代品是 ByteB ...
- bytebuf池_Netty默认的Bytebuf是堆内还是堆外?池化or非池化?
开篇 Netty的ByteBuf有从不同角度有如下2个分类,4种组合! 堆外内存和堆内内存 池化和非池化 我们在利用Netty做底层通信框架的时候,会默认给我们的到底是哪一种组合了? 分析 池化分析 ...
- bytebuf池_Netty篇:ByteBuf之内存池源码分析
Netty的内存池的实现有些复杂,使用了大量的位运算,晦涩难懂,不过万能的博客上好多大神已经介绍的非常详细,推荐四篇很详细很棒的源码分析的文章链接,本文根据自己的理解顺一下思路,内容主要也是出自以下四 ...
- bytebuf池_Netty ByteBuf
ByteBuf ByteBuf需要提供JDK ByteBuffer的功能(包含且不限于),主要有以下几类基本功能: 7种Java基础类型.byte[].ByteBuffer(ByteBuf)的等的读写 ...
- bytebuf池_Netty ByteBuf原理剖析
缓冲区在计算机世界中随处可见,内存中的多级缓冲区,io设备的缓冲区等等,还有我们经常用的内存队列,分布式队列等等.缓冲区,平衡了数据产生方和数据消费方的处理效率差异,提高了数据处理性能. JDK为了解 ...
- bytebuf池_图文分析ByteBuf是什么
ByteBuf是什么 ByteBuf是Netty中非常重要的一个组件,他就像物流公司的运输工具:卡车,火车,甚至是飞机.而物流公司靠什么盈利,就是靠运输货物,可想而知ByteBuf在Netty中是多么 ...
- Java使用JDBC获取数据并打印出来
JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API. JDBC API提供了以下接口和类: Tables Cool DriverManage ...
- java snmp协议 获取数据
最近工作内容涉及到snmp协议相关内容,由于第一次接触,又没有实际的环境测试,写出来的东西自己都不确定能不能用,直到最近有环境后,花了一段时间才搞定. 写下这篇文章,只是给和我之前一样的小白指点一波, ...
- java从键盘获取数据_java实现从键盘获取数据的方法
java实现从键盘获取数据的方法 发布时间:2020-06-25 15:42:06 来源:亿速云 阅读:83 作者:Leah 这期内容当中小编将会给大家带来有关java实现从键盘获取数据的方法,文章内 ...
最新文章
- Java成员变量与类变量_Java基础随记2-成员变量和类变量的区别
- 高颜值的神经网络可视化工具:3D、彩色、可定制,还能可视化参数重要性
- Python基础知识(第一天)
- Sql Group by 使用
- 2017视频监控行业应用趋势与市场发展分析
- mysql分页查询报错,及解决
- Exchange邮箱的创建与配置
- NB-IoT(7)---开发环境搭建及模组驱动开发
- pcb二次钻孔_作为一名合格的PCB设计工程师,了解生产制造很重要
- Eclipse中,将jar包导入为User Library
- (转)ARM Linux启动过程分析
- 如何在spring框架中解决多数据源的问题[转]
- 基于CBOW网络手动实现面向中文语料的word2vec
- elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]
- PMP复习整理考点篇【12】--- 激励理论
- Mysql orchestrator高可用
- iOS高德地图去logo
- MySQL Workbench 已停止工作 错误模块名称: KERNELBASE.dll 异常代码: 0xe0434352 程序无法正常启动:( 0xc000007b)
- 车主委托过户和电子委托书
- WITNESS基础教程