It looks like you're reading one byte at a time. Why not create a buffer and read up to 1024 bytes at a time? (defn write-file [ins outs] (let [buffer (make-array Byte/TYPE 1024)] (loop [len (.read ins buffer)] (if (not (neg? len)) (do (.write outs buffer 0 len) (recur (.read ins buffer))))) (if ins (.close ins)) (if outs (.close outs))))
On Fri, May 15, 2009 at 11:10 AM, Christopher Wilson < christopher.j.wil...@gmail.com> wrote: > > Hi there, > > I'm working on a project that involves transferring large files over > the network (100+MB) and wondering what would work better. I'm newer > to Java than I am to lisp, so I've just grabbed the most obvious > things from the API that I thought could possibly work: > > (ns misc-ports > (:import (java.io BufferedReader InputStreamReader BufferedOutputStream > PrintWriter FileInputStream BufferedOutputStream > FileOutputStream) > (java.net Socket ServerSocket))) > > (defn net-to-file > "Listen on a port, when accepted dump data to named incoming file." > [port filename] > (with-open [sock (.accept (ServerSocket. port)) > ins (BufferedReader. (InputStreamReader. (.getInputStream > sock))) > outf (FileOutputStream. filename)] > (loop [c (.read ins)] > (when-not (== -1 c) > (.write outf c) > (recur (.read ins)))))) > > (defn file-to-net > "Take the name of a file and a waiting ip and port, send named file > on socket." > [filename ipaddr port] > (with-open [sock (Socket. ipaddr port) > outs (BufferedOutputStream. (.getOutputStream sock)) > ins (FileInputStream. filename)] > (loop [c (.read ins)] > (when-not (== -1 c) > (.write outs c) > (recur (.read ins)))))) > > But it turns out that this is rather slow. What would be some methods > to speed this up? > > Thanks! > > -- > Chris > > > > --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---