Tengo un String
que quiero usar como InputStream
. En Java 1.0, podría usar java.io.StringBufferInputStream
, pero así ha sido @Deprecrated
(con una buena razón, no puede especificar la codificación del juego de caracteres):
Esta clase no convierte correctamente los caracteres en bytes. A partir de JDK 1.1, la forma preferida de crear una secuencia a partir de una cadena es a través de la
StringReader
clase.
Puede crear un java.io.Reader
con java.io.StringReader
, pero no hay adaptadores para tomar un Reader
y crear un InputStream
.
Encontré un error antiguo que solicitaba un reemplazo adecuado, pero no existe tal cosa, por lo que yo sé.
La solución alternativa sugerida con frecuencia es utilizarla java.lang.String.getBytes()
como entrada para java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
pero eso significa materializar todo String
en la memoria como una matriz de bytes, y anula el propósito de una secuencia. En la mayoría de los casos, esto no es gran cosa, pero estaba buscando algo que preservara la intención de un flujo: que la menor cantidad de datos posible se (re) materialice en la memoria.