Wie konvertiere ich einen String in einen InputStream in Java?

856

Gegeben eine Zeichenfolge:

String exampleString = "example";

Wie konvertiere ich es in eine InputStream ?

Iain
quelle

Antworten:

1410

So was:

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

Beachten Sie, dass dies voraussetzt, dass Sie einen InputStream möchten, der ein Bytestrom ist, der Ihre ursprüngliche Zeichenfolge darstellt, die als UTF-8 codiert ist .

Für Java - Versionen von weniger als 7, ersetzen StandardCharsets.UTF_8mit "UTF-8".

Iain
quelle
1
Geht dieser Zeichensatz nicht verloren, wenn: String -> Bytes -> ByteArrayInputStream? Wenn Sie dies beispielsweise mit "ü" versuchen, haben die Bytes den richtigen Buchstaben, aber der ByteArrayInputStream hat die richtige Konvertierung verloren. Oder liege ich falsch?
Jonathan Ramos
20
StandardCharsets erfordert Mindest-API-Level 19.
Nantoka
3
@ JonathanRamos Es liegt nicht am Stream, die Konvertierung durchzuführen. Es liegt an allem, was die Bytes wieder in Strings decodiert.
Cruncher
26
@Nantoka Anstelle von StandardCharsets.UTF_8 können Sie Charset.forName ("UTF-8") für jede API-Ebene verwenden.
PJ_Finnegan
seine Arbeit nur ich füge String hinzu newStr = URLDecoder.decode (URLEncoder.encode (Antwort, "iso8859-1"), "UTF-8"); für (utf8)
sirmagid
275

Ich finde, dass die Verwendung von Apache Commons IO mein Leben viel einfacher macht.

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

Möglicherweise bietet die Bibliothek auch viele andere Verknüpfungen zu häufig ausgeführten Aufgaben, die Sie möglicherweise in Ihrem Projekt verwenden können.

Elijah
quelle
5
Sie verwendeten neuen ByteArrayInputStream (exampleString.getBytes ("UTF-8")). Daher wird die Verwendung von InputStream optimiert. Stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar
9
@PankajKumar: Javas JIT-Compiler ist mehr als in der Lage, dies zu integrieren.
Andrew White
8
Die Verwendung einer Methode, die keine Codierung angibt, ist eine schreckliche Idee ...
b1nary.atr0phy
2
@ b1naryatr0phy: Apache Commons enthält eine andere Form dieser Methode, bei der die Codierung als zweiter Parameter verwendet wird (was zu Recht vorzuziehen ist): InputStream in = IOUtils.toInputStream (Quelle "UTF-8");
Cuga
8
Sie können StandardCharsets.UTF_8Definition anstelle von einfachem Text verwenden.
Douglaslas