Come faccio a convertire una stringa in un InputStream in Java?


Risposte:


1410

Come questo:

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

Si noti che ciò presuppone che si desidera un InputStream che sia un flusso di byte che rappresentano la stringa originale codificata come UTF-8 .

Per le versioni di Java inferiori a 7, sostituire StandardCharsets.UTF_8con "UTF-8".


1
Questo set di caratteri non si perde quando si fa: String -> byte -> ByteArrayInputStream? Quando provi questo ad esempio su "ü", i byte avranno la lettera giusta, ma ByteArrayInputStream avrà perso la conversione giusta. O mi sbaglio?
Jonathan Ramos,

20
StandardCharsets richiede un livello API minimo 19.
Nantoka,

3
@JonathanRamos non dipende dallo stream tenere la conversione. Dipende da tutto ciò che sta decodificando i byte in stringhe.
Cruncher,

26
@Nantoka Invece di StandardCharsets.UTF_8 puoi usare Charset.forName ("UTF-8") per qualsiasi livello API.
PJ_Finnegan,

funziona solo aggiungo String newStr = URLDecoder.decode (URLEncoder.encode (response, "iso8859-1"), "UTF-8"); per (utf8)
sirmagid,

275

Trovo che l'uso di Apache Commons IO mi semplifichi la vita.

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

È possibile che la libreria offra anche molte altre scorciatoie per attività comunemente eseguite che è possibile utilizzare nel progetto.


5
Hanno usato il nuovo ByteArrayInputStream (exampleString.getBytes ("UTF-8")). Quindi sarà un modo ottimizzato per utilizzare InputStream stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar,

9
@PankajKumar: il compilatore JIT di Java è più che in grado di incorporare questo.
Andrew White,

8
Usare un metodo che non specifica la codifica è un'idea terribile ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache Commons include un'altra forma di questo metodo che accetta la codifica come secondo parametro (che, a ragione, è preferibile): InputStream in = IOUtils.toInputStream (source, "UTF-8");
Cuga,

8
È possibile utilizzare la StandardCharsets.UTF_8definizione anziché il testo normale.
Douglaslps,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.