- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 ImageInputStream 从 Internet 连接读取 BufferedImage。我关闭 ImageInputStream 在 try header 中创建它。
try(ImageIntputStream is = new ImageIntputStream(connection)) {
BufferedImage img = ImageIO.read(is);
} catch(IOException readException) {
readException.printStackTrace();
}
我想,为了安全就够了。但是阅读有关与读者/作家合作的帖子,例如 here或here或here ,我明白了,我应该刷新某些内容,处理某些内容,关闭某些内容,并将某些内容设置为 null,如果我单独使用 reader,这些内容有时会有所不同。看到如此持续地破坏阅读器和流或与之相关的任何东西,我为自己薄弱而原始的安全措施感到羞愧。
如果我不使用这个 ImageReader,在获得图像后,我还有什么可以冲洗、处置、清空、关闭、关闭、射击、杀死、歼灭、降级、沉默、伤害或以其他方式冒犯的东西?
最佳答案
I feel ashamed of my weak and primitive measures for safety.
TLDR;
别这样。你很好。
<小时/>长版:
您正在使用 try-with-resources statement ,自动调用 close()
在“隐式”资源上finally
try
之后已经完成了。 ImageInputStream
是您创建的唯一资源,因此它是您有责任处置的唯一资源。
ImageIO.read
方法将处理内部管理,例如处理 ImageReader
实例等本身。这不是您的责任(您甚至无权访问这些对象,因此即使您确实想要也无法访问)。
释放返回的BufferedImage
的内存只需分配 null
就足够了引用或让它超出范围。垃圾收集器将为您清理垃圾,就像处理任何普通的 Java 对象一样。您还可以调用flush()
释放与图像关联的 native /显示内存(如果有)。它不疼。如果不这样做,内存无论如何都会被释放,所以不用担心。
更长的版本:
您在问题中引用的帖子大多与您的代码无关。其中两个是关于使用ImageWriter
编写图像。直接地。在这种情况下,您应该始终close()
ImageOutputStream
和dispose()
ImageWriter
使用后实例。
您提到的最后一篇文章(好吧,中间的一篇)是关于绘制 BufferedImage
使用Graphics
语境。在这种情况下,您应该始终dispose()
Graphics/Graphics2D
使用后。
也可以使用 ImageReader
读取图像。直接(类似于编写示例)。在这种情况下,您应该始终close()
ImageInputStream
和dispose()
ImageReader
实例。
但是,这些用例与您在问题的代码示例中所做的操作不同。我只是为了完整性而将其添加到此处。
最后,一句建议:不要因为随机阅读 Google 结果而让自己感到困惑。如有疑问,请前往来源。要么从字面上看,通过阅读 Java 库源代码,要么阅读 API 文档。 ;-)
<小时/>进一步阅读:
关于java - 如果我不直接使用阅读器,关闭 ImageInputStream 就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501694/
我使用 ImageInputStream 从 Internet 连接读取 BufferedImage。我关闭 ImageInputStream 在 try header 中创建它。 try(Image
我正在使用数据驱动设计编写一个简单的游戏,在其中我读取游戏各个元素的图像。因此,我编写了一个解析器来读入文件,确认它们是可接受的图像格式,并使用这些文件创建一个新的 Sprite(我编写的类)。 我使
我正在尝试获取“图像”文件夹中所有图像的高度和宽度。不幸的是,我不断收到“无法创建 ImageInputStream!”错误。我该如何解决? javax.imageio.IIOException: C
从许多代码片段来看,似乎有必要关闭 ImageInputStream。 而在spring框架下,这里的方法: public byte[] downloadImage(String imageUrl)
我正在开发图像抓取应用程序。我正在获取网址 URL imageUrl = new URL(imageSource); 然后我用这个 URL 创建一个 InputStream: InputStream
我在 Tomcat 5.5 中有一个 Servlet,它读取文件夹中的本地镜像。然后将图像发送回 Applet。 我收到此消息“javax.imageio.IIOException:无法创建 Imag
我正在尝试从 mysql 数据库中检索图像 blob 并将其转换回图像文件。迭代 mysql ResultSet 为: while(rs.next()) { byte[] byteArray=r
我终于能够编写以下代码,该代码采用动画 GIF 并将其转换为 png 条。然而由于某种原因它失去了原始 gif 的透明度。有人可以建议我如何保持透明度 public class Main { publ
处理 javax.imageio.IIOException: Can't create an ImageInputStream! 在调用 ImageIO.read(File file) 之后因为缺少
我是一名优秀的程序员,十分优秀!