それが最初のバイト配列に変換することによって、ホスト・相互運用機能を使用して文字列から入力ストリームを構築することは簡単である:別のストリームとバイト相互運用例として
(defn string->stream
([s] (string->stream s "UTF-8"))
([s encoding]
(-> s
(.getBytes encoding)
(java.io.ByteArrayInputStream.))))
、ここで返す関数です与えられたフォーマットに文字列をエンコードする際に発生するバイトのベクトル:
(defn show-bytes
[s encoding]
(let [buf (java.io.ByteArrayOutputStream.)
stream (string->stream s encoding)
;; worst case, 8 bytes per char?
data (byte-array (* (count s) 8))
size (.read stream data 0 (count data))]
(.write buf data 0 size)
(.flush buf)
(apply vector-of :byte (.toByteArray buf))))
+user=> (string->stream "hello")
#object[java.io.ByteArrayInputStream 0x39b43d60 "[email protected]"]
+user=> (isa? (class *1) java.io.InputStream)
true
+user=> (show-bytes "hello" "UTF-8")
[104 101 108 108 111]
+user=> (show-bytes "hello" "UTF-32")
[0 0 0 104 0 0 0 101 0 0 0 108 0 0 0 108 0 0 0 111]
受け入れ答えは良いですし、あなたのタイトルの質問に答えるが、 'clojure.java.io/reader'は、任意の(文字ベースを受け入れることを知っています) 'java.io.Reader'であるため、(バイトベースの)' java.io.InputStream'や文字エンコーディングへの迂回は不要です。代わりに、単に文字列を['java.io.StringReader'](http://docs.oracle.com/javase/8/docs/api/java/io/StringReader.html)にラップしてください:'(java.io .StringReader。body) 'を実行します。 – glts