Як перетворити рядок в 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.
Нантока

3
@JonathanRamos не залежить від потоку, щоб провести конверсію. Це все, що дешифрує байти назад у рядки.
Cruncher

26
@Nantoka Замість StandardCharsets.UTF_8 ви можете використовувати Charset.forName ("UTF-8") для будь-якого рівня API.
PJ_Finnegan

його роботу я просто додаю String newStr = URLDecoder.decode (URLEncoder.encode (відповідь, "iso8859-1"), "UTF-8"); для (utf8)
sirmagid

275

Я вважаю, що використання AOche 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 = новий ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar

9
@PankajKumar: Компілятор JIT Java Java більш ніж здатний вкласти це.
Ендрю Уайт

8
Використання методу, який не визначає кодування, є жахливою ідеєю ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache commons включає ще одну форму цього методу, яка приймає кодування як другий параметр (який, ви праві, краще): InputStream в = IOUtils.toInputStream (джерело, "UTF-8");
Куга

8
Ви можете використовувати StandardCharsets.UTF_8визначення замість простого тексту.
douglaslps

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.