【问题标题】:Clojure representing byte arrayClojure 表示字节数组
【发布时间】:2009-06-27 04:35:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: arrays list file-io clojure


    【解决方案1】:

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

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

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

    【讨论】:

    • 然后像在 Java 中一样创建数组并使用接受 seqable 的 Clojure 函数,它可以神奇地处理数组。对于任何进一步的建议,您可以提及您需要对内容做什么。由于您使用的是字节数组,我假设您需要执行二进制操作,在这种情况下,您可能需要阅读以下文章,该文章说明了一些不错的使用模式:gnuvince.wordpress.com/2009/01/29/…
    【解决方案2】:

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

    (定义字节序列 [rdr] (让 [结果(.rdr 读取)] (如果(=结果-1) (do (.rdr close) nil) (lazy-seq (cons result (byte-seq rdr))))))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-31
      • 2016-03-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2021-01-12
      • 2012-07-14
      • 2012-04-16
      相关资源
      最近更新 更多