Clojure - Java 互操作:传递一个 OutputStream 参数并返回一个字符串
Posted
技术标签:
【中文标题】Clojure - Java 互操作:传递一个 OutputStream 参数并返回一个字符串【英文标题】:Clojure - Java interop: pass an OutputStream argument and get back a String 【发布时间】:2014-07-02 04:31:36 【问题描述】:我正在使用一个 java 库,并想调用一个导出数据的方法。
此方法有两种变体:一种带有用作目标文件名的 String 参数,另一种接受 OutputStream 对象并使用 OutputStreamWriter 写入。
我想使用第二种方法,并且能够将 OutputStream 恢复为字符串,这样我就可以用它做任何我想做的事情了。
我不确定这实际上是否可行,但当我发现 clojure.core/with-out-str 时,我希望它是可能的,但我不确定如何使用它。
是否可以从 Clojure 将 OutputStream 参数传递给 Java 方法并以字符串的形式取回写入的数据?
谢谢。
编辑:
实际上,类构造函数接受一个 OutputStream 参数,一个方法通过它写入并关闭它。 希望这会有所帮助。
【问题讨论】:
如果您将ByteArrayOutputStream
传递给您的方法,您应该能够检索写入的数据。看到这个答案:***.com/a/216913/1916789.
工作就像一个魅力。您能否根据您的评论创建一个答案,以便我接受?谢谢。
不确定我应该这样做,因为这基本上是一个重复的问题,我的回答不会包含任何有价值的东西。我建议您自己编写答案,也许包括解决您问题的一段 Clojure 代码。这可能更有帮助。 :)
【参考方案1】:
@xsc 的评论指出了可能的重复,但我仍然会按照他的建议自己发布答案以保留 Clojure 细节的参考。
这就是我最终得到的结果:
(def baos (java.io.ByteArrayOutputStream.))
(-> (SomeClass. baos) .export)
(String. (.toByteArray baos) (. java.nio.charset.Charset defaultCharset))
有关 Charset 的更多信息,请参阅 this answer 中的 cmets。
【讨论】:
(-> (SomeClass. baos) .export)
部分是干什么用的?我只需使用最后一行即可获得输出。以上是关于Clojure - Java 互操作:传递一个 OutputStream 参数并返回一个字符串的主要内容,如果未能解决你的问题,请参考以下文章