2016-11-11 436 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。

相關問題