¿Cómo puedo obtener un java.io.InputStream de un java.lang.String?
Tengo unString
que quiero usar comoInputStream
. En Java 1.0, podría usarjava.io.StringBufferInputStream
, pero eso ha sido@Deprecrated
(con 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 desde una cadena es a través deStringReader
clase
Puedes crear unajava.io.Reader
conjava.io.StringReader
, pero no hay adaptadores para tomar unaReader
y crea unaInputStream
.
Encontré unaancient bug pidiendo un reemplazo adecuado, pero no existe tal cosa, por lo que puedo decir.
La solución alternativa sugerida a menudo es utilizarjava.lang.String.getBytes()
como entrada ajava.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
pero eso significa materializar toda laString
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 un gran problema, 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.