Respuestas:
ByteArrayInputStream también hace el truco:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Luego convertir a lector:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Desde: JDK1.0 No hay la menor razón para suponer que esta clase es "desde Java 1.4". Ese número de versión incorrecto es especialmente extraño cuando se introdujo Java 1.4 NIO
y tiene poco sentido introducir una API y su sucesor conceptual dentro de la misma versión.
También encontré la IOUtils
clase apache commons , entonces:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
Sería sin pérdidas.
String
en una byte[]
matriz para convertir los bytes de nuevo a char
s entonces ...
¿Tiene que ser específicamente un InputStreamReader? ¿Qué hay de 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);
byte[] bytes = charset.getBytes();
¿Está tratando de obtener a) la Reader
funcionalidad de InputStreamReader
ob) la InputStream
funcionalidad de InputStreamReader
? No obtendrás b). InputStreamReader
no es una InputStream
.
El propósito de InputStreamReader
es tomar InputStream
una fuente de bytes y decodificar los bytes en caracteres en forma de a Reader
. Ya tiene sus datos como caracteres (su Cadena original). Codificar su cadena en bytes y decodificar los bytes nuevamente en caracteres sería una operación redundante.
Si está tratando de obtener una Reader
fuente, use StringReader
.
Si está tratando de obtener un InputStream
(que solo le proporciona bytes), use apache commons IOUtils.toInputStream(..)
como lo sugieren otras respuestas aquí.