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

Iain
la source
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.

Elijah
la source
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