Wie konvertiere ich einen String in einen InputStream in Java?


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


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.