Clojure - Java 互操作:传递一个 OutputStream 参数并返回一个 String

Arn*_*aud 3 java outputstream clojure clojure-java-interop

我正在使用一个 java 库并想调用一个导出数据的方法。

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

我想使用第二种方法并且能够将 OutputStream 返回到一个字符串中,这样我就可以用它做任何我想做的事情。

我不确定它实际上是否可行,但是当我发现 clojure.core/with-out-str 我有一些希望它是可能的,但是我不确定如何使用它。

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

谢谢。

编辑:

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

Arn*_*aud 5

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

这是我的结果:

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

(-> (SomeClass. baos) .export)
(String. (.toByteArray baos) (. java.nio.charset.Charset defaultCharset))
Run Code Online (Sandbox Code Playgroud)

有关 Charset 的更多信息,请参阅此答案中的评论。