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.

Odpovedet emailem