Esta página: http://blog.ostermiller.org/convert-java-outputstream-inputstream describe cómo crear un InputStream desde OutputStream:
new ByteArrayInputStream(out.toByteArray())
Otras alternativas son usar PipedStreams y nuevos hilos, lo cual es engorroso.
No me gusta la idea de copiar muchos megabytes en una nueva matriz de bytes de memoria. ¿Existe una biblioteca que haga esto de manera más eficiente?
EDITAR:
Siguiendo el consejo de Laurence Gonsalves, probé PipedStreams y resultó que no son tan difíciles de manejar. Aquí está el código de muestra en clojure:
(defn #^PipedInputStream create-pdf-stream [pdf-info]
(let [in-stream (new PipedInputStream)
out-stream (PipedOutputStream. in-stream)]
(.start (Thread. #(;Here you write into out-stream)))
in-stream))