Tengo un String
que quiero usar como InputStream
. En Java 1.0, puede utilizar java.io.StringBufferInputStream
, pero que ha sido @Deprecrated
(con buena razón - no se puede especificar el juego de codificación de caracteres):¿Cómo puedo obtener un java.io.InputStream desde un java.lang.String?
Esta clase no convierte correctamente caracteres en bytes. A partir de JDK 1.1, , la forma preferida de crear una secuencia desde una cadena es a través de la clase
StringReader
.
Se puede crear un java.io.Reader
con java.io.StringReader
, pero no hay adaptadores para tomar un Reader
y crear un InputStream
.
Encontré un ancient bug pidiendo un reemplazo adecuado, pero no existe tal cosa, por lo que puedo decir.
La solución sugerida frecuentemente es utilizar java.lang.String.getBytes()
como entrada a 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 el String
en la memoria como una matriz de bytes, y en contra del propósito de una corriente. En la mayoría de los casos, esto no es gran cosa, pero estaba buscando algo que preservara la intención de una transmisión: que la menor cantidad posible de datos se (re) materialice en la memoria.
@djb Just did so. –