2009-06-27 49 views
11

在java中,我會將整個文件讀入字節數組並對其進行一些處理。現在我想在clojure中實現相同的算法。代表字節數組的Clojure

我想知道的是我可以使用列表而不是數組?

我知道我可以從clojure創建數組,但是處理這個問題的lisp方式是什麼?

回答

11

如果問題文件非常大,則應始終考慮使用內存映射文件。 clojure.contrib.mmap提供了一些功能來解決這個問題。

我知道我可以從clojure創建數組,但是處理這個問題的lisp方式是什麼?

我不知道Lisp的方式,但Clojure的方式允許您使用數組上的序列功能,讓您不必有效的表示和舒適的操控(這在我看來是決定之間使Clojure非常實用的一點)。

+0

我要閱讀的文件很小。最大200-300 Kb。 – 2009-06-27 05:38:18

3

這裏是文件中字節的惰性序列,並在讀取最後一個字節時關閉文件句柄。如果您使用由大文件提供的序列,請注意不要將其保存到序列的頭部,否則將耗盡內存。儘管如果您需要在錯誤情況下手動關閉文件,仍然可以保留文件句柄。

 
(defn byte-seq [rdr] 
    (let [result (. rdr read)] 
    (if (= result -1) 
     (do (. rdr close) nil) 
     (lazy-seq (cons result (byte-seq rdr))))))