J'ai un String
que je veux utiliser comme un InputStream
. En Java 1.0, vous pouvez utiliser java.io.StringBufferInputStream
, mais qui a été @Deprecrated
(avec une bonne raison, vous ne pouvez pas spécifier le codage du jeu de caractères):
Cette classe ne comprend pas convertir correctement les caractères en octets. Comme de JDK 1.1, la meilleure façon de créer un flux à partir d'une chaîne est par l'intermédiaire de l'
StringReader
classe.
Vous pouvez créer un java.io.Reader
avec java.io.StringReader
, mais il n'existe pas de cartes de prendre un Reader
et de créer un InputStream
.
J'ai trouvé un ancien bug demander un remplacement convenable, mais pas une telle chose existe-autant que je puis dire.
L'oft a suggéré une solution de contournement est d'utiliser java.lang.String.getBytes()
comme entrée d' java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
mais que signifie à se matérialiser l'ensemble de l' String
dans la mémoire comme un tableau d'octets, et de défaites le but d'un cours d'eau. Dans la plupart des cas, ce n'est pas une grosse affaire, mais je cherchais quelque chose qui permettrait de préserver l'intention d'un cours d'eau--que peu de données que possible est (re)matérialisée dans la mémoire.