Java BufferedImage到ByteArrayOutputStream而没有关闭ByteArrayOutputStream

时间:2016-11-11 12:23:06

标签: java bufferedimage 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"));

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

(当我关闭一个宝贝时,我从来没有正确理解,如果没有,那么任何提示都会受到赞赏)

2 个答案:

答案 0 :(得分:2)

  

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

好的做法是始终关闭OutputStream,但如果是ByteArrayOutputStream,方法flushclose不会做任何事情,所以它不是必填(查看链接以自行查看)。

来自close()

的Javadoc
  

关闭ByteArrayOutputStream无效。

来自OutputStream#flush() 的Javadoc(因为ByteArrayOutputStream不会覆盖它)

  

OutputStream的flush方法不执行任何操作。

答案 1 :(得分:1)

它的工作原理如下:

flush()方法会将所有剩余元素推送到目的地,就像冲厕所一样。

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

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

这适用于所有OutputStream。