基本上,我的情况是这样的:
- 服务器将数据从客户端连接流式传输到
ByteBuffer
名为inQueue的对象。这包含最新的数据流 - 服务器必须处理每个流中的数据,并期望一个特定格式的数据包
- 数据的有效载荷将被读入一个
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);
如您所见,我实际上是在这样做:
- 将完整缓冲区的位置标记为就在有效负载之前
- 将 inQueue 的内容复制到有效负载到单独的
byte[]
对象 - 将完整缓冲区的位置设置为我们刚刚读取的有效负载之后,以便我们可以读取更多数据包
我担心的是,在这样做时,我通过复制缓冲区来浪费内存。请记住,使用的数据包永远不会超过 500 字节,并且通常小于 100 字节。
我的担忧是有效的,还是我表现得偏执?:p