This is great. Thanks for the help. On Dec 16, 2:55 am, Alan Malloy <a...@malloys.org> wrote: > Edit: you should probably use with-open at some point, to make sure > you close the output writer. I copied pretty badly from my own > example :P. So more like: > > (let [pipe-in (PipedInputStream.)] > (future ; new thread to prevent blocking deadlock > (with-open [out (-> pipe-in (PipedOutputStream.) (PrintWriter.))] > (binding [*out* out] > (do-whatever)))) > pipe-in) > > On Dec 16, 1:49 am, Alan Malloy <a...@malloys.org> wrote: > > > > > > > > > You can't really do this in a single thread without risking blocking. > > But with another thread, it's fairly simple. For example, I do this in > > my gzip-middleware, copying an InputStream through a pipe with GZIP > > wrapping:https://github.com/amalloy/ring-gzip-middleware/blob/master/src/ring/... > > > I'm turning an input stream into another input stream, but you can do > > something similar. It's a bit weird, because you're really *not* > > attempting to convert an outputstream to an inputstream in your > > example. You're calling a function that writes to stdout and returns > > nil, and hoping that somehow a stream gets created. Really using with- > > out-str is a reasonable approach here; just create a StringReader from > > the resulting string. > > > But if you need asynchronicity, you can probably do something like > > > (let [pipe-in (PipedInputStream.) > > pipe-out (PipedOutputStream. pipe-in)] > > (future ; new thread to prevent blocking deadlock > > (binding [*out* (PrintWriter. pipe-out)] > > (ofn var))) > > pipe-in) > > > This lets ofn run in another thread, writing its output to *out*, > > which passes through the pipe and becomes an input stream for ring to > > use. > > > On Dec 15, 1:01 pm, Trevor <tcr1...@gmail.com> wrote: > > > > I have created an output stream, which appears to work fine, however > > > I get an error when trying to convert the output stream into an input > > > stream for use in ring: > > > > ('use [clojure.java.io :only [input-stream]]) > > > > => (with-out-str (ofn var)) > > > "it works!" > > > > Now when I use ring: > > > {:body (input-stream (ofn var))} > > > > java.lang.IllegalArgumentException: No implementation of method: :make- > > > input-stream of protocol: #'clojure.java.io/IOFactory found for class: > > > nil > > > > Is there something special I need to do to convert output stream into > > > an input stream ? > > > > Thanks, > > > Trevor
-- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en