首页 > 解决方案 > 如何检查 ImageInputStream 是否已经关闭?

问题描述

在我当前的项目中,我使用第三方库来处理图像。在某些情况下,我不知道 anImageInputStream来自哪里(库的源代码是专有的,我无法编辑该代码)。但是我需要关闭每个流以释放资源,无论其来源如何。

javax.imageio.stream.ImageInputStream#close 方法在流已经关闭时抛出异常。

我知道((MemoryCacheImageInputStream) ios).isClosed()诡计。但是该方法具有私有访问级别并强制执行讨厌的强制转换。

我也知道另一种方法: catch IOException,检查消息并抑制异常(当它与关闭有关时)或重新抛出它(否则),如下所示:

try {
    imageInputStream.close();
} catch (IOException onClose) {
    String message = onClose.getMessage();
    if ("closed".equals(message)) {
        // suppress the exception and write to log
    } else {
        throw new IllegalStateException(onClose);
    }
}

有没有一种优雅的方法来检查状态ImageInputStream

标签: javajavax.imageio

解决方案


一种方法是创建一个扩展ImageInputStream并实现您自己的isClosed()方法的类,例如通过重写该close()方法以在关闭时将布尔标志设置为 true。


推荐阅读