在线写入消息时,我想写下数据中的字节数,然后写下数据。
消息格式:
{num of bytes in data}{data}
我可以通过将数据写入临时 byteArrayOutput 流,然后从中获取字节数组大小,然后写入大小,然后写入字节数组来实现此目的。这种方法涉及大量开销,即。不必要地创建临时字节数组、创建临时流等。
我们是否有更好的方法(同时考虑 CPU 和垃圾创建)来实现这一目标?
最佳答案
典型的方法是引入可重用的ByteBuffer
。例如:
ByteBuffer out = ...
int oldPos = out.position(); // Remember current position.
out.position(oldPos + 2); // Leave space for message length (unsigned short)
out.putInt(...); // Write out data.
// Finally prepend buffer with number of bytes.
out.putShort(oldPos, (short)(out.position() - (oldPos + 2)));
填充缓冲区后,您可以使用 SocketChannel.write(ByteBuffer) 通过线路发送数据(假设您使用的是 NIO)。
关于java - 消息的自定义java序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193672/