J'ai un Stringfichier que je souhaite utiliser comme fichier InputStream. Dans Java 1.0, vous pouvez utiliser java.io.StringBufferInputStream, mais cela a été @Deprecrated(avec raison - vous ne pouvez pas spécifier le codage du jeu de caractères):
Cette classe ne convertit pas correctement les caractères en octets. Depuis JDK 1.1, la méthode préférée pour créer un flux à partir d'une chaîne est via la
StringReaderclasse.
Vous pouvez créer un java.io.Readeravec java.io.StringReader, mais il n'y a pas d'adaptateurs pour prendre un Readeret créer un InputStream.
J'ai trouvé un ancien bug demandant un remplacement approprié, mais rien de tel n'existe - pour autant que je sache.
La solution de contournement souvent suggérée consiste à utiliser java.lang.String.getBytes()comme entrée pour java.io.ByteArrayInputStream:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
mais cela signifie matérialiser le tout Stringen mémoire comme un tableau d'octets, et va à l'encontre de l'objectif d'un flux. Dans la plupart des cas, ce n'est pas un gros problème, mais je cherchais quelque chose qui préserverait l'intention d'un flux - que le moins de données possible soit (re) matérialisé en mémoire.