Comment convertir une chaîne en InputStream en Java?


Réponses:


1410

Comme ça:

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

Notez que cela suppose que vous voulez un InputStream qui est un flux d'octets qui représente votre chaîne d'origine encodée en UTF-8 .

Pour les versions de Java inférieures à 7, remplacez StandardCharsets.UTF_8par "UTF-8".


1
Ce jeu de caractères ne se perd-il pas en faisant: String -> bytes -> ByteArrayInputStream? Lorsque vous essayez ceci sur un "ü" par exemple, les octets auront la bonne lettre, mais le ByteArrayInputStream aura perdu la bonne conversion. Ou ai-je tort?
Jonathan Ramos

20
StandardCharsets nécessite un niveau d'API minimum 19.
Nantoka

3
@JonathanRamos ce n'est pas au flux de retenir la conversion. Cela dépend de ce qui décode les octets en chaînes.
Cruncher

26
@Nantoka Au lieu de StandardCharsets.UTF_8, vous pouvez utiliser Charset.forName ("UTF-8") pour n'importe quel niveau d'API.
PJ_Finnegan

son travail j'ajoute juste String newStr = URLDecoder.decode (URLEncoder.encode (response, "iso8859-1"), "UTF-8"); pour (utf8)
sirmagid

275

Je trouve que l'utilisation d' Apache Commons IO me facilite beaucoup la vie.

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

Vous pouvez constater que la bibliothèque propose également de nombreux autres raccourcis vers des tâches courantes que vous pouvez utiliser dans votre projet.


5
Ils ont utilisé le nouveau ByteArrayInputStream (exampleString.getBytes ("UTF-8")). Il sera donc optimisé de manière à utiliser InputStream stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar

9
@PankajKumar: le compilateur JIT de Java est plus que capable d'intégrer cela.
Andrew White

8
Utiliser une méthode qui ne spécifie pas l'encodage est une idée terrible ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache commons inclut une autre forme de cette méthode qui prend l'encodage comme second paramètre (qui, vous avez raison, est préférable): InputStream in = IOUtils.toInputStream (source, "UTF-8");
Cuga

8
Vous pouvez utiliser la StandardCharsets.UTF_8définition au lieu du texte brut.
douglaslps

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.