将不同标题的大消息写入多个接收者的效率问题

时间:2011-06-02 20:47:02

标签: java sockets performance nio bytebuffer

使用java nio socket向3个用户发送一个字符串(邮件正文)和3个不同的标题。

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

通过这种方式,我仍然需要一个副本用于邮件正文和重写标题。在我的项目中,消息体大约是14 K字节。如果内存页面是2K字节,则对内存效率管理效率不高。

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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