Eu tenho um String
que 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
StringReader
classe.
Você pode criar um java.io.Reader
com java.io.StringReader
, mas não há adaptadores para pegar um Reader
e 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 String
na 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.