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。
有 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()
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。