使用java nio socket向3个用户发送一个字符串(邮件正文)和3个不同的标题。
一种方法是创建一个大字节缓冲区,并将消息体放在某个位置,并将标头置于消息前面。
通过这种方式,我仍然需要一个副本用于邮件正文和重写标题。在我的项目中,消息体大约是14 K字节。如果内存页面是2K字节,则对内存效率管理效率不高。
我的问题:有没有办法避免将大型消息字符串复制到字节缓冲区?我猜C可以使用指针支持它。这是真的吗?
感谢。
答案 0 :(得分:1)
我不会创建String,而是使用您将放置在String中的文本创建ByteBuffer。
注意:字符串不可变,因此它将是一些其他源的副本,例如StringBuilder。使用ByteBuffer可以节省两份副本。
您可以将消息正文放在ByteBuffer中,并在开头添加足够的填充以便稍后放入标题中。这样就不需要再次复制邮件正文了。
答案 1 :(得分:1)
这是收集写入的工作:write(ByteBuffer [],...)方法。