Как создать InputStream из String?

Я не привык к работе с потоками в Java - как мне создать InputStream из String?

Ответ 1

Здесь вы идете:

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

Обновление. Для поддержки нескольких байтов (благодаря комментарию Aaron Waibel):

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

См. ByteArrayInputStream.

Безопасно использовать аргумент charset в методе String # getBytes (charset) выше.

После JDK 7+ вы можете использовать

java.nio.charset.StandardCharsets.UTF_16

вместо строки жесткого кодирования:

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

Ответ 2

Вы можете сделать это:

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

Обратите внимание на кодировку UTF-8. Вы должны указать набор символов, в который вы хотите закодировать байты. Обычно вам нужно выбрать UTF-8, если вам не нужно ничего другого. В противном случае, если вы ничего не выберете, вы получите кодировку по умолчанию, которая может различаться между системами. Из JavaDoc:

Поведение этого метода, когда эта строка не может быть закодирована в кодировке по умолчанию, не указана. Класс CharsetEncoder следует использовать, когда требуется больше контроля над процессом кодирования.

Ответ 3

InputStream in = new ByteArrayInputStream(yourstring.getBytes());

Ответ 4

Вместо CharSet.forName, используя com.google.common.base.Charsets из Google Guava (http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets) немного приятнее:

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

Какой CharSet вы используете, конечно, полностью зависит от того, что вы собираетесь делать с InputStream.

Ответ 5

Java 7 +

Можно использовать класс StandardCharsets JDK:

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

Ответ 6

Начиная с Java 7, вы можете использовать следующую идиому:

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