Another example. I'm running this on a Ubuntu 10.04 laptop with this java: java version "1.6.0_18" OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-0ubuntu1) OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
and this command line: java -Xmx3G -server clojure.main cat2.clj (require '[clojure.java.io :as jio]) (defn- normalize-slurp-opts [opts] (if (string? (first opts)) (do (println "WARNING: (slurp f enc) is deprecated, use (slurp f :encoding enc).") [:encoding (first opts)]) opts)) (defn slurp2 "Reads the file named by f using the encoding enc into a string and returns it." {:added "1.0"} ([f & opts] (let [opts (normalize-slurp-opts opts) data (StringBuffer.) buffer (char-array 4096)] (with-open [#^java.io.Reader r (apply jio/reader f opts)] (loop [c (.read r buffer)] (if (neg? c) (str data) (do (.append data buffer 0 c) (recur (.read r buffer))))))))) (time (with-open [f (java.io.FileReader. "words")] (println (count (slurp f))))) (time (with-open [f (java.io.FileReader. "words")] (println (count (slurp2 f))))) I get this output: $ java -Xmx3G -server clojure.main cat2.clj 279440100 "Elapsed time: 17094.007487 msecs" 279440100 "Elapsed time: 5233.097287 msecs" So at least in my environment there seems to be a big difference between slurp2 with an explicit buffer and the core/slurp one, which appears to be reading a character at a time from a BufferedReader stream. -- 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