Java ImageIO.write () занимает до 6 секунд - PullRequest
1 голос
/ 11 октября 2011

Я пишу веб-приложение, в котором мне нужно отправить изображение из сервлета клиенту.Изображение генерируется динамически и является довольно большим (+ - 2 МБ).Это может быть jpeg, png или gif.

Теперь я использую ImageIO.write () для записи изображения в выходной поток, но это очень медленно.Это займет до 6 секунд, пока клиент увидит изображение.Мне нужно ускорить его.

Есть предложения?

Кстати.Мне известно о В поисках более быстрой альтернативы теме ImageIO .Но это не помогло мне.Поскольку PNG работает медленно, ImageMagick не является решением, и я протестировал JAI, и это было еще хуже.

Заранее спасибо

Редактировать:

Чтобы показать вам некоторый код:

BufferedImage bi = [code to generate Image];
response.setContentType(mime);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi,"png",out);

Я сократил обработку исключений для удобства чтения.

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Кодирование изображений в java в целом довольно медленное, но вы также можете убедиться, что у вас установлены нативные библиотеки, так как они значительно улучшают производительность.

http://download.java.net/media/jai-imageio/builds/release/1.1/INSTALL-jai_imageio.html

0 голосов
/ 15 июня 2018

Учтите, что ImageIO по умолчанию использует временные файлы в качестве кэша при создании ImageInputStreams и ImageOutputStreams .Это можно отключить, вызвав ImageIO.setUseCache (false) .

Для более подробного объяснения см. этот ответ .

0 голосов
/ 11 октября 2011

Вы уверены, что

ImageIO

занимает так много времени - возможно, есть другая проблема, например,

  • медленное (сетевое) подключение к клиенту
  • генерация (расчет) изображения занимает много времени
...