The problem is that once the OutputStream is created you cannot change the destiny of the bytes (i.e. memory or file).
For instance if I create an OutputStream this way:
How could I possibly make that this stream is written to a file? I daresay there is no way to do that.
However, since the OutputStream is used to write bytes, you can write those same bytes in a FileOutputStream after or before you have writen them into the returned OutputStream. In other words, you write your bytes in both streams.