web-dev-qa-db-fra.com

Comment transformer une chaîne en un InputStreamReader en java?

Comment puis-je transformer une valeur String en un InputStreamReader?

273
Yossale

ByteArrayInputStream fait aussi l'affaire:

InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
322
Guido

J'ai aussi trouvé la classe Apache commons IOUtils, donc:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
61
Yossale

Faut-il que ce soit spécifiquement un InputStreamReader? Que diriez-vous d'utiliser StringReader ?

Sinon, vous pourriez utiliser StringBufferInputStream , mais il est obsolète en raison de problèmes de conversion de caractères (raison pour laquelle vous devriez préférer StringReader).

32
Dan Dyer

Même question que @ Dan - pourquoi pas StringReader?

Si ce doit être InputStreamReader, alors:

String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
16
toolkit

Essayez-vous d'obtenir une fonctionnalité _) Reader sur InputStreamReader ou b) InputStream fonctionnalité sur InputStreamReader? Vous n'obtiendrez pas b). InputStreamReader n'est pas un InputStream.

Le but de InputStreamReader est de prendre un InputStream - une source d'octets - et de décoder les octets en caractères sous la forme d'un Reader. Vous avez déjà vos données sous forme de caractères (votre chaîne d'origine). Coder votre chaîne en octets et décoder les octets en caractères serait une opération redondante.

Si vous essayez d'extraire un Reader de votre source, utilisez StringReader.

Si vous essayez d'obtenir un InputStream (qui ne vous donne que des octets), utilisez Apache commons IOUtils.toInputStream(..) comme suggéré par d'autres réponses ici.

3
Fai Ng

Vous pouvez essayer Cactoos :

InputStream stream = new InputStreamOf(str);

Ensuite, si vous avez besoin d'une Reader:

Reader reader = new ReaderOf(stream);
2
yegor256