我正在为二进制数据开发一个基于 Java 的下载器。该数据通过基于文本的协议(UU 编码)传输。对于网络任务,使用netty库。服务器将二进制数据拆分成数千个小数据包并发送到客户端(即 Java 应用程序)。
每次收到新消息(数据)时,我都会从netty收到一个对象。ChannelBuffer
现在我需要处理这些数据,除了其他任务我需要检查来自服务器的包的标题(如 HTTP 状态行)。为此,我调用ChannelBuffer.array()
接收byte[]
数组。然后我可以将该数组转换为字符串,new String(byte[])
并轻松检查(例如比较)其内容(再次,如与 HTTP 中的“200”状态消息进行比较)。
我正在编写的软件使用多个线程/连接,以便我从netty并行接收多个数据包。
这通常可以正常工作,但是,在分析应用程序时,我注意到当与服务器的连接良好且数据输入速度非常快时,这种到String
对象的转换似乎是一个瓶颈。在这种情况下,CPU 使用率接近 100%,并且根据分析器,在调用此String(byte[])
构造函数时会花费大量时间。
我寻找一种更好的方法来从ChannelBuffer
到 a String
,并注意到前者也有一种toString()
方法。但是,该方法甚至比String(byte[])
构造函数还要慢。
所以我的问题是:你们中的任何人都知道实现我正在做的事情的更好选择吗?