Обработка файла Java с плавающей точкой как ленивая последовательность Clojure - PullRequest
11 голосов
/ 03 июня 2010

Каким будет идеологический способ в Clojure получить ленивую последовательность по файлу, содержащему значения с плавающей запятой, сериализованные из Java? (Я играл с with-open подходом, основанным на примерах чтения строки, но не могу соединить точки для обработки потока как плавающего.)

Спасибо.

1 Ответ

15 голосов
/ 03 июня 2010
(defn float-seqs [#^java.io.DataInputStream dis]
  (lazy-seq
    (try
      (cons (.readFloat dis) (float-seqs dis))
      (catch java.io.EOFException e
        (.close dis)))))

(with-open [dis (-> file java.io.FileInputStream. java.io.DataInputStream.)]
  (let [s (float-seqs dis)]
    (doseq [f s]
      (println f))))

Вы не обязаны использовать with-open, если уверены, что собираетесь использовать весь seq.

Если вы используете with-open, дважды проверьте, что вы не пропускаете seq (или производный seq) вне его области действия.

...