Java BufferedImage 到 ByteArrayOutputStream 没有关闭 ByteArrayOutputStream

Java BufferedImage to ByteArrayOutputStream without close ByteArrayOutputStream

java.awt.image.BufferedImage 我正在通过以下方式获取和返回 ByteArrayOutputStream

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( combined, "png", baos );
return baos;

然后我生成要在 REST 端点上返回的 base64 表示:

return new String(Base64.encodeBase64(baos.toByteArray()), Charset.forName("UTF-8"));

我的问题是:我应该冲洗并关闭 baos 吗?

(我从来没有正确理解什么时候应该关闭 baos,什么时候不应该,所以任何提示将不胜感激)

My question is: should I flush and close the baos?

最好的做法是始终关闭 OutputStream,但如果是 ByteArrayOutputStream,方法 flush and close 不会执行任何操作,因此不需要(检查链接自己看)。

来自 close()

的 Javadoc

Closing a ByteArrayOutputStream has no effect.

来自 OutputStream#flush() 的 Javadoc(因为 ByteArrayOutputStream 没有覆盖它)

The flush method of OutputStream does nothing.

它是这样工作的:

flush() 方法会以某种方式将所有剩余元素推送到它们的目的地,就像您冲马桶时一样。

在使用 close() 之前,您应该使用 flush() 以确保没有任何剩余的东西,因为如果您在没有发送任何东西的情况下关闭,它可能会丢失。

你应该在 'used the stream' 之后使用 flush()close()

这适用于所有 OutputStreams。