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.

questionAnswers(8)

yourAnswerToTheQuestion