我有一些使用ImageReader类读取大量TIF图像的代码。 imageReader
对象是最终的,并在构造函数中创建。
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会在其加载的第一个图像上“卡住”,并且即使提供了不同的ImageInputStream,也会一遍又一遍地加载相同的图像。这可以通过记录器的输出来证明。
我该如何解决这个问题。我正在考虑拍摄图像的“指纹”并从迭代器中获取不同的ImageReader,如果发生这种情况,但这看起来有点过分。有谁知道如何解决这个问题?
答案 0 :(得分:2)
正如@MadProgrammer在评论部分中所说,阅读多个图像的典型模式是为每个图像获取新的ImageReader
,之后dispose()
。与实际读取图像相比,创建读取器实例所花费的时间/内存非常小。因此,任何性能损失都应该可以忽略不计。
理论上,在每个reset()
之前/之后调用ImageReader
上的read
就足够了。