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 NIOy tiene poco sentido introducir una API y su sucesor conceptual dentro de la misma versión.
También encontré la IOUtilsclase apache commons , entonces:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")Sería sin pérdidas.
Stringen una byte[]matriz para convertir los bytes de nuevo a chars 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 Readerfuncionalidad de InputStreamReaderob) la InputStreamfuncionalidad de InputStreamReader? No obtendrás b). InputStreamReaderno es una InputStream.
El propósito de InputStreamReaderes tomar InputStreamuna 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 Readerfuente, 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í.