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