将Java文件作为惰性Clojure序列处理

时间:2010-06-02 20:50:42

标签: clojure io

在Clojure中,在包含从Java序列化的浮点值的文件中获取延迟序列是什么意思? (我已经玩弄了基于行读取示例的with-open方法,但似乎无法连接点以将流处理为浮点数。)

感谢。

1 个答案:

答案 0 :(得分:15)

(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))))

如果您确定要使用整个seq,则不需要使用with-open。

如果你使用with-open,请仔细检查你是否没有将seq(或派生的seq)泄露到其范围之外。