¿Cómo convierto una cadena en un InputStreamReader en java?
Pregunta
¿Cómo puedo transformar un valor de String
en un InputStreamReader
?
Solución
ByteArrayInputStream también hace el truco:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Otros consejos
También encontré la clase IOUtils
de apache commons, así que:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
¿Tiene que ser específicamente un InputStreamReader? ¿Qué te parece usar StringReader ?
De lo contrario, podría usar StringBufferInputStream , pero está en desuso debido a problemas de conversión de caracteres (por lo que debería preferir StringReader).
La misma pregunta que @Dan : ¿por qué no StringReader?
Si tiene que ser InputStreamReader, entonces:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
¿Está tratando de obtener una) funcionalidad Reader
de InputStreamReader
, o b) InputStream
fuera de InputStreamReader ? Usted no obtendrá b).
InputStreamReader
no es un InputStream
.
El propósito de InputStreamReader
es tomar un InputStream
, una fuente de bytes, y decodificar los bytes en caracteres en forma de un Reader
. Ya tienes tus datos como caracteres (tu String original). Codificar su cadena en bytes y decodificar los bytes de nuevo a caracteres sería una operación redundante.
Si está intentando obtener un Reader
de su fuente, use StringReader
.
Si está intentando obtener un InputStream
(que solo le da bytes), use apache commons IOUtils.toInputStream (..)
como lo sugieren otras respuestas aquí.
Puedes probar Cactoos :
InputStream stream = new InputStreamOf(str);
Luego, si necesita un Reader
:
Reader reader = new ReaderOf(stream);