1

有一个字符串(消息正文)和 3 个不同的标头要使用 java nio 套接字发送给 3 个用户。

一种方法是创建一个大字节缓冲区并将消息正文放在某个位置并将标头放在消息正文的前面。

这样,我仍然需要为邮件正文复制一份并重写标题。在我的项目中,消息正文大约为 14 K 字节。如果内存页为 2K 字节,则内存效率管理效率不高。

我的问题:有没有办法避免将大消息字符串复制到字节缓冲区?我猜C可以使用指针来支持它。这是真的吗?

谢谢。

4

2 回答 2

1

我不会创建字符串,而是使用您将放置在字符串中的文本创建 ByteBuffer。

注意:字符串是不可变的,因此它将是一些其他源的副本,例如 StringBuilder。相反,使用 ByteBuffer 将为您节省两个副本。

您可以将消息正文放在 ByteBuffer 中,并在开始时有足够的填充,以便稍后放入标头。这样消息正文就不需要再次复制了。

于 2011-06-02T21:00:39.907 回答
1

这是收集写入的工作:write(ByteBuffer[], ...) 方法。

于 2011-06-03T10:18:46.497 回答