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.