我正在使用clojure.java.shell命令中的sh函数来读取命令的非常大的输出。输出大约是60meg的数据。
我一直在收到java.lang.OutOfMemoryError。有没有办法打开一种管道,让我读取输出并将其解析为矢量。就像命令输出的延迟序列一样?
基本上,数据是一个很大的字节数组,我想将其转换为数字并放入向量中。
答案 0 :(得分:3)
clojure.java.shell/sh将始终返回非惰性字符串
在BufferedReader上使用lazy line-seq的解决方案(不处理关闭,环境传递和编码):
(->> (.exec (Runtime/getRuntime) "YOUR_LONG_RUNNING_COMMAND ARG ...")
.getInputStream
clojure.java.io/reader
line-seq
(map YOUR-FUNCTION))