複数のクライアントと一つのサーバの間で、以下の機能をsocketプログラミングで作りたいと考えています。

クライアントがサーバにファイルをアップロードすると、
サーバは接続済みの全てのクライアントにそのファイルを流す。

これを実現するためのサーバ側のコードで悩んでいます。
まずアップロードされたファイルを受け取るためにソケットからinputStreamを取得しますが、
これを各ソケットのoutputStreamに流す時に、どのように実装すればいいのか分かりません。

一つのinputStreamをfor文で複数のoutputStreamに流そうとしても、最初のoutputStreamにしか流せないようです。
これはinputStreamが内部でどこまでデータを取り出したかを管理(?)してるからでしょうか。

他の案としては、一時的なファイルを作ってしまってそのファイルを複数のソケットが読めばできそうですが
どう考えても良いやり方とは思えません。

結局、巨大なbyte配列で一時的にデータを溜めるぐらいしか思いつきません。

何かよい方法は無いでしょうか。