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


Ответы:


1410

Нравится:

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

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

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


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определение вместо простого текста.
Дугласлпс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.