Я не привык к работе с потоками в Java - как мне создать InputStream
из String
?
Как создать 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) );