2016-11-11 59 views
1

有一个java.awt.image.BufferedImage我越来越并返回一个ByteArrayOutputStream通过:的Java BufferedImage中ByteArrayOutputStream没有关闭ByteArrayOutputStream

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

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

然后,我产生一个Base64表示要在REST端点返回

我的问题是:我应该冲洗并关闭保险?

(我从来没有正确的理解时,我应该关闭BAOS,当没有,所以任何提示可以理解的)

+2

检查[this](http://stackoverflow.com/questions/23164598/java-is-bytearrayoutputstream-safe-without-flush-and-close)主题 – Squiddie

+1

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

回答

2

我的问题是:我应该清空并关闭BAOS?

好的做法是始终关闭的OutputStream,但在ByteArrayOutputStream的情况下,所以它不是必需的(检查链接自己看)方法flushclose没有做任何事情。

close()

关闭一个ByteArrayOutputStream的Javadoc没有效果。

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

OutputStream flush方法不做任何事。

1

它的工作原理是这样的:

flush()方法将某种推动所有剩余的元素,他们的目的地,当你冲厕所等。

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

在'使用流'之后,您应该使用flush()close()

这适用于所有OutputStreams。

相关问题