У меня есть код, который использует класс ImageReader для чтения в большом количестве изображений TIF. Объект imageReader
является окончательным и создается в конструкторе.javax.imageio.ImageReader загружает одно и то же изображение поверх и overagain
synchronized(imageReader) {
LOG.debug(file);
FileInputStream fin = new FileInputStream(file);
ImageInputStream iis = ImageIO.createImageInputStream(fin);
imageReader.setInput(iis, false);
int sourceXSubSampling = targetSize == null ?
1 : Math.max(1, imageReader.getWidth(0)/targetSize.width);
int sourceYSubSampling = targetSize == null ?
1 : Math.max(1, imageReader.getHeight(0)/targetSize.height);
ImageReadParam subSamplingParam = new ImageReadParam();
subSamplingParam.setSourceSubsampling(sourceXSubSampling, sourceYSubSampling, 0, 0);
return imageReader.read(0, subSamplingParam);
}
О один экземпляр в четырехдневных ImageReader «застревают» на первом изображении он загружен и сохраняет тот же загружается изображение снова и снова, даже если она снабжена различными ImageInputStreams. Об этом свидетельствует вывод на регистратор.
Как это решить. Я думал о том, чтобы взять «отпечаток пальца» изображения и получить другой ImageReader от итератора, если это произойдет, но это похоже на перебор. кто-нибудь знает, как решить эту проблему?
1- Закрыть ваши потоки; 2- Утилизируйте читателя после того, как вы закончите чтение; 3. Просите «нового» читателя каждый раз. Может не решить проблему, но не помешает ... – MadProgrammer
На самом деле вам не нужен дополнительный 'FileInputStream', просто вызовите' ImageIO.createImageInputStream (файл) 'напрямую. Тогда вам не нужно закрывать его, и он [может быть даже быстрее] (http://stackoverflow.com/questions/18522398/fastest-way-to-read-write-images-from-a-file-into -abufferedimage/18534396 # 18534396) тоже. :-) – haraldK