【问题标题】:Java BufferedImage to ByteArrayOutputStream without close ByteArrayOutputStream [duplicate]Java BufferedImage 到 ByteArrayOutputStream 没有关闭 ByteArrayOutputStream [重复]
【发布时间】:2016-11-11 12:23:05
【问题描述】:

拥有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"));

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

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

【问题讨论】:

  • 如果您使用的是 Java 7,请使用资源尝试,这是处理此类问题的最佳 Java 功能

标签: java bufferedimage bytearrayoutputstream


【解决方案1】:

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

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

来自close()的Javadoc

关闭ByteArrayOutputStream 无效。

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

OutputStream 的 flush 方法什么都不做。

【讨论】:

    【解决方案2】:

    它是这样工作的:

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

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

    您应该在“使用流”后使用flush()close()

    这适用于所有输出流。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 2012-08-11
      相关资源
      最近更新 更多