11

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

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

我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?

4

2 回答 2

11

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

我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?

我不知道 Lisp 方式,但 Clojure 方式允许您在数组上使用序列函数,因此您不必在高效表示和舒适处理之间做出决定(在我看来,这是使Clojure 如此务实)。

于 2009-06-27T05:25:49.600 回答
3

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

(定义字节序列 [rdr]
  (让 [结果(.rdr 读取)]
    (如果(=结果-1)
      (do (.rdr close) nil)
      (lazy-seq (cons result (byte-seq rdr))))))
于 2009-07-10T19:32:47.997 回答