Так что я пытаюсь получить изображение 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. Так почему это так? И что делать?
Java-ImageIO просто плоский для всех ... Я сомневаюсь, что вы делаете что-то неправильно. –
^Это смелое заявление. Однако вы можете предоставить (загрузить) файл, который вы пытаетесь загрузить? Кажется, это несколько специфично, но для того, чтобы убедиться в этом: он настолько медленен для каждого произвольного, случайного изображения 800x600 или только для этого конкретного? (Возможно, у него есть нечетный, необычный формат, тип сжатия или так ...) – Marco13
@ Marco13 ImageIO имеет репутацию того, что он был необъяснимо медленным, даже после изучения исходного кода. – chrylis