在Clojure中,如何在包含从Java序列化的浮点值的文件上获取惰性序列的方式是什么? (我已经玩过with-open
的方法,基于线阅读的例子,但似乎无法连接点来处理流为浮动。)将Java浮点文件当作懒惰的Clojure序列处理
谢谢。
在Clojure中,如何在包含从Java序列化的浮点值的文件上获取惰性序列的方式是什么? (我已经玩过with-open
的方法,基于线阅读的例子,但似乎无法连接点来处理流为浮动。)将Java浮点文件当作懒惰的Clojure序列处理
谢谢。
(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)。
优雅。谢谢。 – Cumbayah 2010-06-03 07:49:03
好极了:它在我的脑海中启发了懒惰seq的使用。它最终点击。 – 2010-06-03 08:03:44
每行一个浮点数,或制表符分隔还是空格分隔?你能举一些例子数据吗? – 2010-06-02 21:14:53
说明:该文件由Java浮点数的二进制序列化(即简单类型“float”)组成,它不被任何东西隔开。我想根据(可能非常大的)文件中的每个条目进行计算 - 想象一下,我想总结它们。即我只想在所有的值上都有一个懒惰的序列。 – Cumbayah 2010-06-02 21:36:25