Eclipse 在Clojure中重定向输入

Eclipse 在Clojure中重定向输入,eclipse,clojure,eclipse-kepler,dacapo,Eclipse,Clojure,Eclipse Kepler,Dacapo,我想重定向Clojure基准中的标准输入。我已将该文件作为参数传递,并尝试在java中查找等效代码: System.setIn(新文件输入流(文件名)) 但是对于Clojure 主要问题是,我使用DaCapo套件来计算基准测试的性能,加载基准测试的方法不识别特殊字符,如“系统。in通常包装在*in*中。它是一种动态绑定,旨在通过绑定在本地范围内反弹,如下所示: (with-open [is (clojure.java.io/reader "/tmp/foo.txt")] (binding [

我想重定向Clojure基准中的标准输入。我已将该文件作为参数传递,并尝试在java中查找等效代码: System.setIn(新文件输入流(文件名)) 但是对于Clojure


主要问题是,我使用DaCapo套件来计算基准测试的性能,加载基准测试的方法不识别特殊字符,如“
系统。in
通常包装在
*in*
中。它是一种动态绑定,旨在通过
绑定在本地范围内反弹,如下所示:

(with-open [is (clojure.java.io/reader "/tmp/foo.txt")]
  (binding [*in* is]
    (println (read-line))))
请注意,它是
系统的包装。在
中,而不是
系统。在
本身,更改此绑定不会更改
系统。在
中。它只影响在*
中使用
*的Clojure函数,例如此处的
读取行

如果您正在调用一些希望读取
System.in
的Java代码,则必须调用
System.setIn

(with-open [is (clojure.java.io/input-stream filename)]
  (System/setIn is)
  (do-stuff))

这些是Clojure和Java中的选项,但我仍然不确定我是否理解您的用例。如果这不太合理,请在评论中澄清


编辑:关于你的程序,如果你正在创建缓冲区,你真的需要在*
*中创建它们吗?与只打开自己的流有什么区别?

在尝试了这么多不同的事情后,我终于找到了答案

我必须在缓冲区内使用文件读取器,因此代码如下:

(defn -main [& args]
  (let [max-dna-chars-per-line 60
        br (java.io.BufferedReader. (clojure.java.io/reader (first args)))
        bw (java.io.BufferedWriter. *out* (* 16 8192)) ; 16 * default size, I think

其中参数包含文件名…

我有一个加载clojure benchmark revcomp的线束类。传入该基准的参数是一个数组。在该数组中,我可以拥有该基准输入的路径文件或其内容本身。如果我运行revcomp的jar,它所采用的参数是“是一个shell,而不是Java。我想我仍然缺少一个部分。如果您从外部调用Clojure,它将读取System.in,与Java相同,并且可能是需要解决的外部问题。System.setIn(新的FileInputStream(args[0]));那么,如果我在加载revcomp基准的revcomp Harnese类中更改System.In,System.In不会更改吗?
(defn -main [& args]
  (let [max-dna-chars-per-line 60
        br (java.io.BufferedReader. (clojure.java.io/reader (first args)))
        bw (java.io.BufferedWriter. *out* (* 16 8192)) ; 16 * default size, I think