Как мне преобразовать строку в InputStream в Java?

Ответы:

1410

Нравится:

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

Обратите внимание, что это предполагает, что вы хотите, чтобы InputStream представлял собой поток байтов, представляющих вашу исходную строку, закодированную как UTF-8 .

Для версий Java менее 7 замените StandardCharsets.UTF_8на "UTF-8".

Iain
источник
1
Разве эта кодировка не теряется при выполнении: String -> bytes -> ByteArrayInputStream? При попытке, например, использовать «ü», байты будут иметь правильную букву, но ByteArrayInputStream потеряет правильное преобразование. Или я не прав?
Джонатан Рамос
20
StandardCharsets требует минимального уровня API 19
Nantoka
3
@JonathanRamos это не до потока, чтобы держать преобразование. Это зависит от того, что декодирует байты обратно в строки.
Cruncher
26
@Nantoka Вместо StandardCharsets.UTF_8 вы можете использовать Charset.forName ("UTF-8") для любого уровня API.
PJ_Finnegan
свою работу просто добавляю String newStr = URLDecoder.decode (URLEncoder.encode (response, "iso8859-1"), "UTF-8"); для (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"));
Панкадж Кумар
9
@PankajKumar: JIT-компилятор Java более чем способен это встроить.
Эндрю Уайт
8
Использование метода, который не определяет кодировку, является ужасной идеей ...
b1nary.atr0phy
2
@ b1naryatr0phy: Apache commons включает еще одну форму этого метода, которая принимает кодировку в качестве второго параметра (который, вы правы, предпочтительнее): InputStream in = IOUtils.toInputStream (source, "UTF-8");
Cuga
8
Вы можете использовать StandardCharsets.UTF_8определение вместо простого текста.
Дугласлпс