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