J'ai un String
fichier 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
StringReader
classe.
Vous pouvez créer un java.io.Reader
avec java.io.StringReader
, mais il n'y a pas d'adaptateurs pour prendre un Reader
et 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 String
en 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.