拥有一个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"));我的问题是:我应该冲洗并关闭包吗?
(我从来不知道什么时候该关包,什么时候不关,所以任何小费都会很感激)
发布于 2016-11-11 12:27:16
我的问题是:我应该冲洗并关闭包吗?
好的做法是总是关闭OutputStream,但是对于ByteArrayOutputStream,方法flush和close不做任何事情,所以它是不需要的(查看链接以自己查看)。
来自 close()的Javadoc
关闭
ByteArrayOutputStream没有任何效果。
来自 OutputStream#flush()的Javadoc (因为ByteArrayOutputStream没有覆盖它)
OutputStream的刷新方法不起任何作用。
发布于 2016-11-11 12:28:50
它的工作方式如下:
flush()方法会将所有剩余的元素推到目的地,比如冲马桶的时候。
在使用close()之前,您应该使用flush(),以确保没有任何剩余的东西,因为如果您关闭时没有发送所有的东西,那么它可能会丢失。
您应该在“使用流”之后使用flush()和close()。
这适用于所有的OutputStreams。
https://stackoverflow.com/questions/40547954
复制相似问题