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".

Iain
źródło
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.

Elijah
źródło
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,