Eu tenho um Stringque quero usar como um InputStream. No Java 1.0, você poderia usar java.io.StringBufferInputStream, mas tem sido @Deprecrated(com um bom motivo - você não pode especificar a codificação do conjunto de caracteres):
Esta classe não converte corretamente caracteres em bytes. A partir do JDK 1.1, a maneira preferida de criar um fluxo de uma string é por meio da
StringReaderclasse.
Você pode criar um java.io.Readercom java.io.StringReader, mas não há adaptadores para pegar um Readere criar um InputStream.
Eu encontrei um bug antigo pedindo uma substituição adequada, mas tal coisa não existe - pelo que eu posso dizer.
A solução alternativa frequentemente sugerida é usar 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));
}
mas isso significa materializar o todo Stringna memória como um array de bytes, e anula o propósito de um stream. Na maioria dos casos, isso não é grande coisa, mas eu estava procurando por algo que preservasse a intenção de um stream - que o mínimo possível de dados seja (re) materializado na memória.