Tengo un Stringque 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
StringReaderclase.
Puede crear un java.io.Readercon java.io.StringReader, pero no hay adaptadores para tomar un Readery 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 Stringen 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.