java - 如何检查 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
?
解决方案
一种方法是创建一个扩展ImageInputStream
并实现您自己的isClosed()
方法的类,例如通过重写该close()
方法以在关闭时将布尔标志设置为 true。
推荐阅读
- python-3.x - 在Python中将iso格式的日期时间字符串转换为日期时间对象
- android - 如何将PNG添加到android中的浮动操作按钮
- validation - 在 Access 中对字段使用数据验证时,如何使表达式有条件?
- java - 如何在颤振资产中运行 java 代码?
- css - CSS悬停在堆叠元素上
- flutter - 如何在文本字段颤动中获得价值
- laravel - Laravel查询两列之和之差
- latex - 为什么 Latex 会一直写到超过页脚和下边距?
- java - 使用 Jackson 将 JSON 字符串解析为数组
- java - 当我的应用程序没有任何控制器,没有 controlleradvice 时,spring boot 应用程序中的休眠验证异常处理