Zavírání buffered streamů

Lukáš Záruba lukas.zaruba na media-solutions.cz
Úterý Prosinec 29 10:51:52 CET 2009


Zdravím,
narazil jsem ve své aplikaci na problém, se streamy a nějak jsem nenašel 
odpověď ani v JavaDocu ani Googlu, tak snad někdo z vás to zrovna řešil :)
*Situace:*
Klientský kód (servlet) potřebuje kopírovat nějaký image (prostě data) 
do output streamu. Použije na to mnou vytvořenou util class.
V této util třídě je metoda, která kopíruje mezi dvěma buffered streamy 
s určitým bufferem atd.
Metoda copy je ovšem přetížená, aby se v klientském kódu nemusely 
vytvářet buffered streamy, takže existuje i pro klasický Input/Output 
Stream s tím, že je obalí do buffered streamu a zavolá copy metodu pro 
buffered streamy.
*Problém:*
Kopírovaní proběhne, nicméně když skončí, ve výstupu není poslední 
buffer, tzn nedošlo k poslednímu "flushi". Je to způsobené tím, že 
klientský kód je odpovědný za zavření streamu (popř. nezavření v 
servletu) a tím dojde k uzavření underlying streamu a ne přímo buffered 
streamu.
*Triviální řešení:*
To se dá snadno vyřešit tím, že se v bufferované metodě po kopírování 
provede flush.
*Otázka:
*Nevznikají nějaké resource leaky a je vůbec obecně validní zavřít pouze 
underlying stream pod buffered streamem pokud jsem si jistý (ten přidaný 
flush), že jsou do něj zapsána všechna data?

Předem děkuji za všechny reakce.

Lukáš Z.




Další informace o konferenci Konference