2016-11-07 13 views
0

Так что я пытаюсь получить изображение PNG из потока.Почему ImageIO.read() SOOO медленный?

image = ImageIO.read(inputStream); 

И этот код работает в течение 10 секунд! Я думал, что проблема была в медленном InputStream, поэтому я сначала попытался загрузить его в буфер.

byte[] bytes = inputStreamToBytes(inputStream); 
image = ImageIO.read(new ByteArrayInputStream(bytes)); 

И угадайте, что! Требуется около 100 мс, чтобы загрузить его из InputStream в буфер, но черт возьми, просто чтобы прочитать его из массива байтов! Десять (TEN) секунд для чтения! Из ОЗУ!

Я делаю это на малине PI. И да, я понимаю, что это игрушка, а не настоящий компьютер. Поэтому я попытался сделать это на своем MacBook Air. Действительно, две секунды лучше, чем десять. Но все же для некоторых 800x600 PNG. Так почему это так? И что делать?

+0

Java-ImageIO просто плоский для всех ... Я сомневаюсь, что вы делаете что-то неправильно. –

+3

^Это смелое заявление. Однако вы можете предоставить (загрузить) файл, который вы пытаетесь загрузить? Кажется, это несколько специфично, но для того, чтобы убедиться в этом: он настолько медленен для каждого произвольного, случайного изображения 800x600 или только для этого конкретного? (Возможно, у него есть нечетный, необычный формат, тип сжатия или так ...) – Marco13

+3

@ Marco13 ImageIO имеет репутацию того, что он был необъяснимо медленным, даже после изучения исходного кода. – chrylis

ответ

1

Возможно, вам необходимо установить Java Native IO библиотеки, которые они не установлены по умолчанию.

http://www.oracle.com/technetwork/java/install-jai-imageio-1-0-01-139659.html

Если вы не установили это Lib все операции на изображениях выполняются в Java не изначально.

+0

Хотя JAI (с родными кодеками, например, libpng в этом случае) может помочь в некоторых случаях, я сомневаюсь, что JAI поставляется с предварительно созданными исходными двоичными файлами для Raspberry Pi. JAI не разрабатывался уже несколько лет. Создание собственного интерфейса JNI для libpng, вероятно, является лучшим вариантом. – haraldK

+0

Does OpenJDK содержат нативный IO? – user1748526

 Смежные вопросы

  • Нет связанных вопросов^_^