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