чтение большого вывода команды с clojure - PullRequest
3 голосов
/ 01 ноября 2010

Я использую функцию sh из команды clojure.java.shell, чтобы прочитать очень большой вывод команды.Выход составляет около 60 мг данных.

Я продолжаю получать java.lang.OutOfMemoryError.Есть ли способ открыть своего рода канал, который позволил бы мне прочитать вывод и разобрать его в вектор.Как ленивая последовательность для вывода команды?

В основном данные представляют собой большой массив байтов, который я хочу преобразовать в просто числа и поместить в вектор.

1 Ответ

3 голосов
/ 01 ноября 2010

clojure.java.shell / sh всегда возвращает не ленивую строку

Решение (не обрабатывает закрытие, передачу окружения и кодирование) с использованием lazy line-seq в BufferedReader:

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