Thanks, these are useful posts.

On Thu, Jun 11, 2009 at 4:49 AM, Nicolas Buduroi<nbudu...@gmail.com> wrote:
>
> I've got an even faster version using memory-mapped file I/O. It also
> simplify the code a little bit.
>
> (defn fast-read-file [#^String filename #^String charset]
>  (with-open [cin (. (new FileInputStream filename) getChannel)]
>    (let [size (. (new File filename) length)
>          char-buffer (. ByteBuffer (allocate size))
>          decoder (. (. Charset (forName charset)) (newDecoder))]
>      (str
>       (. decoder
>          (decode
>           (.map cin (. FileChannel$MapMode READ_ONLY) 0 size)))))))
>
> On Windows I get these results:
>
> nio=> (time (dotimes [i 1000] (fast-read-file ".emacs" "ISO-8859-1")))
> "Elapsed time: 247.9453 msecs"
> nio=> (time (dotimes [i 1000] (fast-read-file ".emacs" "ISO-8859-1")))
> "Elapsed time: 247.666881 msecs"
> nio=> (time (dotimes [i 1000] (fast-read-file ".emacs" "ISO-8859-1")))
> "Elapsed time: 247.895424 msecs"
>
> Compared with the previous version with buffer size equal to the
> length of the file:
>
> nio=> (time (dotimes [i 1000] (read-file ".emacs" "ISO-8859-1" (. (new
> File ".emacs") length))))
> "Elapsed time: 264.470276 msecs"
> nio=> (time (dotimes [i 1000] (read-file ".emacs" "ISO-8859-1" (. (new
> File ".emacs") length))))
> "Elapsed time: 265.775947 msecs"
> nio=> (time (dotimes [i 1000] (read-file ".emacs" "ISO-8859-1" (. (new
> File ".emacs") length))))
> "Elapsed time: 263.828204 msecs"
>
> The API documentation for the map method aren't very exhaustive,
> there's not much information on its limits. A lot of details are
> implementation dependent and left unspecified, most problems though
> seems to be related to writing.
>
> >
>

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