问题 Clojure代表字节数组


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

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

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


6495
2018-06-27 04:35


起源



答案:


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

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

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


11
2018-06-27 05:25



我要读的文件很小。 200-300 Kb的最大值 - Hamza Yerlikaya
然后像在Java中一样创建数组,并使用接受seqable的Clojure函数,它可以神奇地使用数组。对于任何进一步的建议,您可以提及您对内容的确切需要。由于您使用的是字节数组,我假设您需要执行二进制内容,在这种情况下,您可能需要阅读以下文章,该文章说明了一些不错的模式: gnuvince.wordpress.com/2009/01/29/... - pmf


答案:


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

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

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


11
2018-06-27 05:25



我要读的文件很小。 200-300 Kb的最大值 - Hamza Yerlikaya
然后像在Java中一样创建数组,并使用接受seqable的Clojure函数,它可以神奇地使用数组。对于任何进一步的建议,您可以提及您对内容的确切需要。由于您使用的是字节数组,我假设您需要执行二进制内容,在这种情况下,您可能需要阅读以下文章,该文章说明了一些不错的模式: gnuvince.wordpress.com/2009/01/29/... - pmf


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

(defn byte-seq [rdr]
  (让[结果(.rdd读取)]
    (if(= result -1)
      (do(.rdr close)nil)
      (lazy-seq(cons result(byte-seq rdr))))))

3
2017-07-10 19:32