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
-~----------~----~----~----~------~----~------~--~---

Reply via email to