Clojure - Java interop:传递一个OutputStream参数并返回一个String

时间:2014-05-14 08:21:35

标签: java clojure outputstream clojure-java-interop

我使用的是java库,想要调用导出数据的方法。

此方法有两个变体:一个使用String参数作为目标文件名,另一个接受OutputStream对象并使用OutputStreamWriter写入它。

我想使用第二种方法,并能够将OutputStream返回到String中,这样我就可以随心所欲地做任何事情。

我不确定它实际上是否可能,但是当我发现clojure.core / with-out-str时,我有一些希望它是可能的,但是我不知道怎么做使用它。

是否可以将OutputStream参数从Clojure传递给Java方法并将写入的数据作为String返回?

感谢。

编辑:

实际上,类构造函数接受一个OutputStream参数,一个方法通过它写入并关闭它。 希望这会有所帮助。

1 个答案:

答案 0 :(得分:4)

@ xsc的评论指出可能重复,我仍然会按照他自己发布答案的建议来保留对Clojure细节的参考。

这是我最终的结果:

(def baos (java.io.ByteArrayOutputStream.))

(-> (SomeClass. baos) .export)
(String. (.toByteArray baos) (. java.nio.charset.Charset defaultCharset))

有关Charset的更多信息,请参阅this answer中的评论。