Эффективная отправка больших объемов данных с ServletOutputStream - PullRequest
1 голос
/ 29 октября 2009

Для типа контента "текст / обычный", что из следующего более эффективно, если мне нужно отправить огромные данные.

ServletOutputStream sos = response.getOutputStream();

sos.write(byte[])
//or
sos.println("")

Спасибо

Ответы [ 3 ]

4 голосов
/ 29 октября 2009

Это зависит от формата ваших исходных данных.

Если это строка, вы, вероятно, получите более высокую производительность, используя response.getPrintWriter().print() - и, безусловно, она будет безопаснее с точки зрения кодирования.

Если это байтовый массив, то ServletOutputStream.write(byte[]), вероятно, самый быстрый, поскольку он не будет выполнять никаких дополнительных преобразований.

Реальный ответ, однако, на этот и все другие вопросы «что быстрее» - это измерить: -)

3 голосов
/ 29 октября 2009

После быстрого взгляда на реализацию Sun OutputStream.write(byte[]) и ServletOutputStream.println(String), я бы сказал, что нет никакой реальной разницы. Но, как выразился ChssPly76, это можно проверить только путем измерения.

1 голос
/ 02 ноября 2009

Наиболее эффективным является написание InputStream (который НЕ является разновидностью ByteArrayInputStream).

Просто потому, что каждый байт байта [] съедает ровно один байт памяти JVM, а каждый символ строки ест то количество байтов из памяти JVM, которое символ занимает в пространстве. Итак, представьте, что у вас есть 128 МБ доступной памяти кучи, а размер «огромного» текстового / простого файла составляет 1,28 МБ, и 100 пользователей одновременно запрашивают файл, и ваше приложение завершится с ошибкой OutOfMemoryError. Не очень профессионально.

Соберите «огромные» данные где-нибудь в базе данных или в файловой системе диска и получите их как InputStream «способом по умолчанию» (т.е. из БД с помощью ResultSet # getBinaryStream () или с диска с помощью FileInputStream) и запишите их OutputStream через байтовый буфер и / или BufferedInputStream / BufferedOutputStream.

Пример такого сервлета можно найти здесь .

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...