2016-11-11 6 views
1

Having a java.awt.image.BufferedImage Ich erhalte und die Rückkehr ein ByteArrayOutputStream von:Java BufferedImage zu ByteArrayOutputStream ohne enge ByteArrayOutputStream

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

Dann habe ich eine Base64-Darstellung erzeugen auf einem REST-Endpunkt zurückgegeben werden:

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

Meine Frage ist: soll ich den Baos spülen und schließen?

(Ich habe nie richtig verstanden, wenn ich einen baos schließen sollte und wann nicht, so wird jede Spitze geschätzt werden)

+2

Überprüfen Sie [diese] (http://stackoverflow.com/questions/23164598/java-is-bytearrayoutputstream-safe-without-flush-and-close) Thema – Squiddie

+1

Wenn Sie Java 7 verwenden, dann verwenden Sie bitte versuchen mit Ressourcen Es ist die beste Eigenschaft von Java, um solche Art von Problem zu behandeln –

Antwort

2

Meine Frage ist: soll ich die baos spülen und schließen?

Die gute Praxis wäre immer ein OutputStream aber im Falle eines ByteArrayOutputStream zu schließen, die Methoden flush und close nichts tun, damit es nicht (überprüfen Sie die Links selbst zu sehen) erforderlich ist.

Vom Javadoc von close()

ein ByteArrayOutputStream Closing hat keine Wirkung.

Vom Javadoc von OutputStream#flush() (seit ByteArrayOutputStream enthebt es nicht)

Die Flush-Methode von OutputStream nichts tut.

1

Es funktioniert wie folgt:

die flush() Methode wird eine Art Push alle verbleibenden Elemente zu ihrem Bestimmungsort, wie wenn man die Toilette spülen.

vor der Verwendung close() sollten Sie flush() verwenden, um sicherzustellen, dass nichts übrig bleibt, denn wenn Sie schließen, ohne alles gesendet wird es wahrscheinlich verloren gehen.

Sie sollten flush() und close() verwenden, nachdem Sie den Stream verwendet haben.

Dies funktioniert für alle OutputStreams.

Verwandte Themen