java - 消息的自定义java序列化

标签 java serialization

在线写入消息时,我想写下数据中的字节数,然后写下数据。

消息格式:

{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/

相关文章:

serialization - 如何使用 RestSharp 将对象发布(作为 XML)到我的 ApiController?

c++ - Eigen 和 boost::serialize

java - <T 扩展可识别<?扩展可序列化>>?

java - 如何在 myeclipse 中使用 CVS 存储库

java - Pixelart 的抗锯齿算法

java jdbc 和 jframe

java - 基于不同的和第二个谓词的过滤器列表

python - 如何在 Python 中获取 JSON 格式的持久规则?

java - 如何在未使用 XML 配置文件配置的 Spring 应用程序中激活 JSR-250 注释?

java - 我可以序列化 ArrayList 而不序列化其中包含的对象吗?