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

Reply via email to