Проблема эффективности написания больших сообщений с разными заголовками для нескольких получателей - PullRequest
1 голос
/ 03 июня 2011

Существует строка (тело сообщения) и 3 различных заголовка, которые нужно отправить 3 пользователям с помощью сокета java nio.

Один из способов - создать большой байтовый буфер, поместить тело сообщения в какое-то положение и поместить заголовок перед телом сообщения.

Таким образом, мне все еще нужно одну копию для тела сообщения и переписать заголовки. В моем проекте тело сообщения составляет около 14 Кбайт. Если страница памяти имеет размер 2 КБ, она неэффективна для управления эффективностью памяти.

Мой вопрос: есть ли способ избежать копирования большой строки сообщения в байтовый буфер? Я предполагаю, что C может поддержать это, используя указатели. Это правда?

Спасибо.

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Это работа для сбора записей: метод write (ByteBuffer [], ...).

1 голос
/ 03 июня 2011

Я бы не создавал String, но создал бы ByteBuffer с текстом, который вы поместили бы в String.

Примечание: строка не является изменяемой, поэтому она будет копией другого источника, например StringBuilder. Использование вместо этого ByteBuffer сэкономит вам две копии.

Вы можете поместить тело сообщения в ByteBuffer с достаточным заполнением в начале, чтобы добавить заголовок позже. Таким образом, тело сообщения не нужно будет снова копировать.

...