将Java浮动文件视为惰性Clojure序列

将Java浮动文件视为惰性Clojure序列,clojure,io,Clojure,Io,在Clojure中,在一个包含从Java序列化的浮点值的文件上获得一个惰性序列的理想方式是什么?(我曾经尝试过一种基于行读取示例的方法和open方法,但似乎无法将点连接起来以浮点数的形式处理流。) 谢谢 (defn float-seqs [#^java.io.DataInputStream dis] (lazy-seq (try (cons (.readFloat dis) (float-seqs dis)) (catch java.io.EOFExcepti

在Clojure中,在一个包含从Java序列化的浮点值的文件上获得一个惰性序列的理想方式是什么?(我曾经尝试过一种基于行读取示例的
方法和open
方法,但似乎无法将点连接起来以浮点数的形式处理流。)

谢谢

(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,则无需使用open


如果与open一起使用,请仔细检查序列(或派生序列)是否泄漏到其范围之外。

每行一个浮点,或制表符分隔,或空格分隔?您能给出一些示例数据吗?说明:该文件由Java浮点的二进制序列化(即简单类型“float”)组成,没有任何分隔。我想根据(可能非常大的)文件中的每个条目进行计算——想象一下我想将它们全部相加。也就是说,我只想要一个覆盖所有值的惰性序列。太好了:它在我脑海中照亮了惰性序列的用法。它终于成功了。