Javaのストリームの操作に慣れていない-InputStream
からString
を作成するにはどうすればよいですか?
どうぞ:
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());
これを行うことができます:
InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));
UTF-8
エンコーディングに注意してください。バイトをエンコードする文字セットを指定する必要があります。他に特に必要がない場合は、UTF-8
を選択するのが一般的です。それ以外の場合、何も選択しないと、システム間で異なるデフォルトのエンコードが取得されます。 JavaDoc から:
この文字列をデフォルトの文字セットでエンコードできない場合のこのメソッドの動作は指定されていません。エンコードプロセスをさらに制御する必要がある場合は、CharsetEncoderクラスを使用する必要があります。
InputStream in = new ByteArrayInputStream(yourstring.getBytes());
Java 7 +
StandardCharsets
JDKクラスを利用できます。
String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());
Java 7以降では、次のイディオムを使用できます。
String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );
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を使用して何を行うかに完全に依存します。