Clojure表示字节数组

时间:2009-06-27 04:35:08

标签: arrays list file-io clojure

在java中,我会将整个文件读入字节数组并对其进行一些处理。现在我想在clojure中实现相同的算法。

我想知道的是我可以使用列表而不是数组吗?

我知道我可以从clojure创建数组但是处理这个问题的lisp方法是什么?

2 个答案:

答案 0 :(得分:11)

如果有问题的文件非常大,您应该始终考虑使用内存映射文件。 clojure.contrib.mmap提供了一些处理这一问题的功能。

  

我知道我可以从clojure创建数组但是处理这个问题的lisp方法是什么?

我不知道Lisp方式,但Clojure方式允许你在数组上使用序列函数,所以你不必在有效表示和舒适处理之间做出决定(在我看来,这是其中之一)让Clojure如此务实的要点。)

答案 1 :(得分:3)

这是文件中字节的延迟序列,并在读取最后一个字节时关闭文件句柄。如果您使用由大文件提供的序列,请注意不要在任何地方抓住序列的头部,否则您将耗尽内存。可以保留文件句柄,以防您需要在错误情况下手动关闭它。

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