2013-05-22 2 views
1

Я планирую использовать Thumbnailator для создания эскизов изображений большого размера (0.5-10MB). Я просмотрел их код и обнаружил, что ImageIO используется для создания эскизов.Использование NIO с Image IO или Thumbnailator

Я новичок как для файлов изображений, так и их технических характеристик и пакета ImageIO. Я хотел бы знать, использует ли ImageIO (или может быть использован) NIO для чтения файлов и создания эскизов? Это поможет повысить производительность при создании эскизов, и нам приходится генерировать много - 4 миниатюры на изображение, изображения от 0,5 МБ до 10 МБ, в среднем около 30 запросов в секунду.

+0

Что заставляет вас думать, что NIO будет читать файл быстрее, чем потоки 'java.io'? Время будет потрачено на обработку изображения, а не на ввод-вывод. – EJP

+0

@EJP, Is not NIO быстрее, чем 'io'? Я также хотел бы получить эту выгоду при обработке изображений, хотя я согласен с тем, что большая часть процессора будет использоваться для создания миниатюры и не ждет ввода-вывода. – coderSam

+0

Вы сделали доказательство реализации концепции типа, чтобы оценить, какую производительность вы можете получить, используя библиотеку из коробки? – haraldK

ответ

0

ImageIO использует абстракцию над потоками, называемую ImageInputStream. Несколько реализаций существует, при поддержке InputStream, RandomAccessFile и т.д.

Чтобы ответить на ваш вопрос, да, можно создавать плагин для ImageIO, чтобы обеспечить ImageInputStream сек подкрепленных NIO (FileChannel в качестве примера). Посмотрите на класс ImageInputStreamSpi.

Но я не уверен, что это создаст большую часть улучшения по сравнению с существующей реализацией на основе RandomAccessFile (многие существующие классы были модифицированы для использования NIO, когда они были введены).

Одна вещь, которая может потенциально увеличить производительность, вызывает ImageIO.setUseCache(false), чтобы отключить кэширование дисков (за счет кэширования в памяти).

К сожалению, я не знаю Thumbnailator, поэтому не могу сказать, как эти параметры повлияют на производительность в вашем случае.

+0

Я попробую это и опубликую результаты, возможно, на следующей неделе, так как фокус переходит от извлечения производительности, к выполнению задач спринта. – coderSam

+1

Мне любопытно, вы что-то добились с этим? – haraldK