我正在使用 clojure.java.shell 命令中的 sh 函数来读取命令的非常大的输出。输出大约是 60meg 的数据。

我不断收到 java.lang.OutOfMemoryError。有没有办法打开一种管道,让我读取输出并将其解析为 vector 。就像命令输出的惰性序列一样?

基本上,数据是一个大字节数组,我想将其转换为数字并放入向量中。

最佳答案

clojure.java.shell/sh 将始终返回一个非惰性字符串

在 BufferedReader 上使用惰性行序列的解决方案(不处理关闭、环境传递和编码):

(->> (.exec (Runtime/getRuntime) "YOUR_LONG_RUNNING_COMMAND ARG ...")
    .getInputStream
    clojure.java.io/reader
    line-seq
    (map YOUR-FUNCTION))

关于clojure - 使用 clojure 读取大型命令输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4071343/

10-15 22:10