gpt4 book ai didi

java - 如果我不直接使用阅读器,关闭 ImageInputStream 就足够了吗?

转载 作者:行者123 更新时间:2023-12-02 02:28:18 26 4
gpt4 key购买 nike

我使用 ImageInputStream 从 Internet 连接读取 BufferedImage。我关闭 ImageInputStream 在 try header 中创建它。

try(ImageIntputStream is = new ImageIntputStream(connection)) {
BufferedImage img = ImageIO.read(is);
} catch(IOException readException) {
readException.printStackTrace();
}

我想,为了安全就够了。但是阅读有关与读者/作家合作的帖子,例如 hereherehere ,我明白了,我应该刷新某些内容,处理某些内容,关闭某些内容,并将某些内容设置为 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() ImageOutputStreamdispose() ImageWriter使用后实例。

您提到的最后一篇文章(好吧,中间的一篇)是关于绘制 BufferedImage使用Graphics语境。在这种情况下,您应该始终dispose() Graphics/Graphics2D使用后。

也可以使用 ImageReader 读取图像。直接(类似于编写示例)。在这种情况下,您应该始终close() ImageInputStreamdispose() ImageReader实例。

但是,这些用例与您在问题的代码示例中所做的操作不同。我只是为了完整性而将其添加到此处。

最后,一句建议:不要因为随机阅读 Google 结果而让自己感到困惑。如有疑问,请前往来源。要么从字面上看,通过阅读 Java 库源代码,要么阅读 API 文档。 ;-)

<小时/>

进一步阅读:

关于java - 如果我不直接使用阅读器,关闭 ImageInputStream 就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com