Jak przekonwertować ciąg na InputStream w Javie?


Odpowiedzi:


1410

Lubię to:

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

Zauważ, że zakłada to, że chcesz InputStream, który jest strumieniem bajtów reprezentujących twój oryginalny ciąg zakodowany jako UTF-8 .

Dla wersji Java mniej niż 7, zastąpić StandardCharsets.UTF_8z "UTF-8".


1
Czy ten zestaw znaków nie gubi się podczas wykonywania: String -> bytes -> ByteArrayInputStream? Podczas próby na przykład na „ü” bajty będą miały odpowiednią literę, ale ByteArrayInputStream straci właściwą konwersję. A może się mylę?
Jonathan Ramos

20
StandardCharsets wymaga minimalnego poziomu interfejsu API 19.
Nantoka 30.01.2014

3
@JathanathanRamos konwersja nie zależy od strumienia. To zależy od tego, co dekoduje bajty z powrotem na ciągi.
Cruncher

26
@Nantoka Zamiast StandardCharsets.UTF_8 możesz użyć Charset.forName („UTF-8”) dla dowolnego poziomu API.
PJ_Finnegan

jego praca właśnie dodałem String newStr = URLDecoder.decode (URLEncoder.encode (odpowiedź, „iso8859-1”), „UTF-8”); for (utf8)
sirmagid

275

Uważam, że korzystanie z Apache Commons IO znacznie ułatwia moje życie.

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

Może się okazać, że biblioteka oferuje również wiele innych skrótów do często wykonywanych zadań, których możesz używać w swoim projekcie.


5
Użyli nowego ByteArrayInputStream (exampleString.getBytes („UTF-8”)). Tak więc zostanie zoptymalizowany sposób użycia strumienia InputStream = new ByteArrayInputStream (exampleString.getBytes („UTF-8”));
Pankaj Kumar

9
@PankajKumar: Kompilator JIT Java jest więcej niż w stanie to uwzględnić.
Andrew White

8
Użycie metody, która nie określa kodowania, to okropny pomysł ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache commons zawiera inną formę tej metody, która przyjmuje kodowanie jako drugi parametr (który, masz rację, jest lepszy): InputStream in = IOUtils.toInputStream (source, "UTF-8");
Cuga

8
Możesz użyć StandardCharsets.UTF_8definicji zamiast zwykłego tekstu.
douglaslps,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.