基本上,我的情况是这样的:
ByteBuffer
对象。这包含最新的数据流byte[]
对象,然后单独处理现在我的问题归结为: 将剩余的缓冲区数据(有效负载)复制到byte[]
阵列,这对性能有害吗?
这就是它的样子:
// pretend we're reading the packet ID and length
// int len = LENGTH OF PACKET PAYLOAD
/*
* Mark the starting position of the packet's payload.
*/
int pos = inQueue.position();
byte[] payload = new byte[len];
inQueue.get(payload);
// Process the packet's payload here
/*
* Set the inQueue buffer to the length added to the previous position
* so as to move onto the next packet to process.
*/
inQueue.position(pos + len);
正如你所看到的,我基本上是这样做的:
byte[]
对象我担心的是,在这样做时,我通过复制缓冲区来浪费内存。请记住使用的数据包永远不会超过500个字节,通常不到100个字节。
我的担忧是否有效,或者我是表现偏执狂? :P
答案 0 :(得分:1)
你应该避免它。这就是ByteBuffer设计的全部原因:避免数据拷贝。
这里的“处理有效负载”究竟是什么意思?
通过稍微重新安排在那里发生的任何事情,您应该能够直接在ByteBuffer中执行此操作,首先调用flip()
,调用一个或多个get()
以获取所需的数据,以及之后compact()
(clear()
如果你确定它是空的),没有中间复制步骤进入另一个byte []数组。
答案 1 :(得分:0)
这不仅是不必要的,而且,为了回答你的问题,即使在扩大规模时也不会发现性能变化。