web-dev-qa-db-ja.com

文字列からInputStreamを作成するにはどうすればよいですか?

Javaのストリームの操作に慣れていない-InputStreamからStringを作成するにはどうすればよいですか?

115
Amir Rachum

どうぞ:

InputStream is = new ByteArrayInputStream( myString.getBytes() );

Updateマルチバイトサポート用(Aaron Waibel 'sコメント):

InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());

ByteArrayInputStream manualをご覧ください。

上記の String#getBytes(charset) メソッドでcharset引数を使用しても安全です。

JDK 7以降では使用できます

Java.nio.charset.StandardCharsets.UTF_16

ハードコードされたエンコード文字列の代わりに:

InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());
144
anubhava

これを行うことができます:

InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));

UTF-8エンコーディングに注意してください。バイトをエンコードする文字セットを指定する必要があります。他に特に必要がない場合は、UTF-8を選択するのが一般的です。それ以外の場合、何も選択しないと、システム間で異なるデフォルトのエンコードが取得されます。 JavaDoc から:

この文字列をデフォルトの文字セットでエンコードできない場合のこのメソッドの動作は指定されていません。エンコードプロセスをさらに制御する必要がある場合は、CharsetEncoderクラスを使用する必要があります。

34
WhiteFang34
InputStream in = new ByteArrayInputStream(yourstring.getBytes());
4
user235064

Java 7 +

StandardCharsets JDKクラスを利用できます。

String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());
2
Stephan

Java 7以降では、次のイディオムを使用できます。

String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );
1
Abdull

CharSet.forNameの代わりに、GoogleのGuavaのcom.google.common.base.Charsets(http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets)を使用する方が少し便利です。

InputStream is = new ByteArrayInputStream( myString.getBytes(Charsets.UTF_8) );

どちらのCharSetを使用するかは、当然、InputStreamを使用して何を行うかに完全に依存します。

0
vorburger