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.