javax.imageio.ImageReader加载相同的图像和overagain

时间:2013-08-29 21:54:51

标签: java javax.imageio

我有一些使用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,如果发生这种情况,但这看起来有点过分。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

正如@MadProgrammer在评论部分中所说,阅读多个图像的典型模式是为每个图像获取新的ImageReader,之后dispose()。与实际读取图像相比,创建读取器实例所花费的时间/内存非常小。因此,任何性能损失都应该可以忽略不计。

理论上,在每个reset()之前/之后调用ImageReader上的read就足够了。