Como posso obter um java.io.InputStream de um java.lang.String?
Eu tenho umString
que eu quero usar comoInputStream
. No Java 1.0, você poderia usarjava.io.StringBufferInputStream
, mas tem sido@Deprecrated
(por um bom motivo - você não pode especificar a codificação do conjunto de caracteres):
Esta classe não converte caracteres corretamente em bytes. No JDK 1.1, a maneira preferida de criar um fluxo a partir de uma string é através doStringReader
classe
Você pode criar umjava.io.Reader
comjava.io.StringReader
, mas não há adaptadores para fazer umaReader
e crie umInputStream
.
Encontrei umancient bug pedindo uma substituição adequada, mas não existe tal coisa - até onde eu sei.
A solução frequentemente sugerida é usarjava.lang.String.getBytes()
como entrada parajava.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
mas isso significa materializar todo oString
na memória como uma matriz de bytes e anula o objetivo de um fluxo. Na maioria dos casos, isso não é grande coisa, mas eu estava procurando por algo que preservasse a intenção de um fluxo - que o mínimo de dados possível seja (re) materializado na memória.