Réponses:
ByteArrayInputStream fait également l'affaire:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Convertissez ensuite en lecteur:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Depuis: JDK1.0 Il n'y a pas la moindre raison de supposer que cette classe est "depuis Java 1.4". Ce mauvais numéro de version est particulièrement étrange lors de l'introduction de Java 1.4 NIO
et il n'a pas de sens d'introduire une API et son successeur conceptuel dans la même version.
J'ai également trouvé la IOUtils
classe apache commons , donc:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
serait sans perte.
String
en un byte[]
tableau pour reconvertir les octets en char
s alors…
Doit-il être 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 (c'est pourquoi vous devriez préférer StringReader).
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);
byte[] bytes = charset.getBytes();
Essayez-vous de retirer a) des Reader
fonctionnalités deInputStreamReader
ou b) des InputStream
fonctionnalités 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). L'encodage de votre chaîne en octets et le décodage des octets en chars serait une opération redondante.
Si vous essayez de tirer Reader
parti de votre source, utilisezStringReader
.
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.