Javaで文字列をInputStreamに変換するにはどうすればよいですか?


回答:


1410

このような:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

これは、UTF-8としてエンコードされた元の文字列を表すバイトのストリームであるInputStreamが必要であることを前提としています。

Javaのバージョンが7未満の場合は、に置き換えStandardCharsets.UTF_8てください"UTF-8"


1
この文字セットは、次のときに失われませんか:String-> bytes-> ByteArrayInputStream?たとえば「ü」でこれを試すと、バイトは正しい文字になりますが、ByteArrayInputStreamは正しい変換を失います。それとも私は間違っていますか?
Jonathan Ramos

20
StandardCharsetsは最小APIレベル19が必要です
Nantoka

3
@JonathanRamos変換を保持するのはストリームの責任ではありません。バイトを文字列にデコードし直すのは何でも問題ありません。
ランチャー2014年

26
@Nantoka StandardCharsets.UTF_8の代わりに、任意のAPIレベルでCharset.forName( "UTF-8")を使用できます。
PJ_Finnegan 2014

その仕事は私が追加するだけですString newStr = URLDecoder.decode(URLEncoder.encode(response、 "iso8859-1")、 "UTF-8"); for(utf8)
sirmagid

275

Apache Commons IOを使用すると、私の生活がはるかに簡単になることがわかりました。

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

ライブラリには、プロジェクトで使用できる一般的に実行されるタスクへの他の多くのショートカットも含まれていることがあります。


5
彼らは新しいByteArrayInputStream(exampleString.getBytes( "UTF-8"))を使用しました。したがって、InputStream stream = new ByteArrayInputStream(exampleString.getBytes( "UTF-8"));を使用する方法が最適化されます。
Pankaj Kumar

9
@PankajKumar:JavaのJITコンパイラーはこれをインライン化するだけでは不十分です。
アンドリューホワイト

8
エンコーディングを指定しないメソッドを使用するのはひどい考えです...
b1nary.atr0phy

2
@ b1naryatr0phy:Apache commonsには、エンコードを2番目のパラメーターとして受け取るこのメソッドの別の形式が含まれています(これは正しいです)。InputStreamin = IOUtils.toInputStream(source、 "UTF-8");
Cuga

8
StandardCharsets.UTF_8プレーンテキストの代わりに定義を使用できます。
douglaslps 2015

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.