【发布时间】:2009-06-27 04:35:07
【问题描述】:
在 java 中,我会将整个文件读入字节数组并对其进行一些处理。现在我想在 clojure 中实现相同的算法。
我想知道的是我可以使用列表而不是数组吗?
我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?
【问题讨论】:
标签: arrays list file-io clojure
在 java 中,我会将整个文件读入字节数组并对其进行一些处理。现在我想在 clojure 中实现相同的算法。
我想知道的是我可以使用列表而不是数组吗?
我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?
【问题讨论】:
标签: arrays list file-io clojure
如果有问题的文件非常大,您应该始终考虑使用内存映射文件。 clojure.contrib.mmap 提供了一些函数来处理这个问题。
我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?
我不了解 Lisp 方式,但 Clojure 方式允许您在数组上使用序列函数,因此您不必在高效表示和舒适处理之间做出决定(我认为这是使 Clojure 如此务实的要点)。
【讨论】:
这是文件中字节的惰性序列,并在读取最后一个字节时关闭文件句柄。如果您使用由大文件提供的序列,请注意不要在任何地方抓住序列的头部,否则您将耗尽内存。可以保留文件句柄,以防您需要在错误情况下手动关闭它。
(定义字节序列 [rdr] (让 [结果(.rdr 读取)] (如果(=结果-1) (do (.rdr close) nil) (lazy-seq (cons result (byte-seq rdr))))))【讨论】: