Clojure - Java-взаимодействие: передайте аргумент OutputStream и получите String

Я использую библиотеку Java и хочу вызвать метод, который экспортирует данные.

Этот метод имеет два варианта: один с параметром String, который используется в качестве имени файла назначения, и другой, который принимает объект OutputStream и записывает в него объект OutputStreamWriter.

Я хотел бы использовать второй метод и иметь возможность вернуть OutputStream в String, чтобы я мог делать с ним все, что захочу.

Я не уверен, что это возможно на самом деле, но, как я нашел clojure.core / with-out-str, у меня есть некоторая надежда, что это возможно, однако я не уверен, как его использовать.

Можно ли передать аргумент OutputStream в метод Java из Clojure и вернуть записанные данные в виде строки?

Благодарю.

Редактировать:

На самом деле конструктор класса принимает аргумент OutputStream, а метод записывает его и закрывает. Надеюсь это поможет.

1 ответ

Решение

Комментарий @xsc указал на возможный дубликат, но я все равно буду следовать его советам по публикации ответа самостоятельно, чтобы сохранить ссылку на особенности Clojure.

Вот чем я закончил:

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

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

Смотрите комментарии в этом ответе для получения дополнительной информации о Charset.

Другие вопросы по тегам