web-dev-qa-db-fra.com

Comment créer un InputStream à partir d'une chaîne?

Je n'ai pas l'habitude de travailler avec des flux dans Java - Comment créer un InputStream à partir d'un String?

115
Amir Rachum

Voici:

InputStream is = new ByteArrayInputStream( myString.getBytes() );

Mise à jour Pour une prise en charge multi-octets (grâce à Aaron Waibel 's commentaire):

InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());

S'il vous plaît voir ByteArrayInputStream manual.

Il est prudent d'utiliser un argument de jeu de caractères dans la méthode String # getBytes (jeu de caractères) ci-dessus.

Après JDK 7+, vous pouvez utiliser

Java.nio.charset.StandardCharsets.UTF_16

au lieu d'une chaîne de codage en dur:

InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());
144
anubhava

Vous pourriez faire ceci:

InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));

Noter la UTF-8 encodage. Vous devez spécifier le jeu de caractères dans lequel vous voulez coder les octets. Il est courant de choisir UTF-8 si vous n'avez pas spécifiquement besoin d'autre chose. Sinon, si vous ne sélectionnez rien, vous obtiendrez le codage par défaut qui peut varier d'un système à l'autre. De la JavaDoc :

Le comportement de cette méthode lorsque cette chaîne ne peut pas être codée dans le jeu de caractères par défaut n'est pas spécifié. La classe CharsetEncoder doit être utilisée lorsque davantage de contrôle sur le processus de codage est requis.

34
WhiteFang34
InputStream in = new ByteArrayInputStream(yourstring.getBytes());
4
user235064

Java 7 +

Il est possible de tirer parti de la classe StandardCharsets JDK:

String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());
2
Stephan

Commençant par Java 7, vous pouvez utiliser l'idiome suivant:

String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );
1
Abdull

Au lieu de CharSet.forName, utiliser com.google.common.base.Charsets à partir de Google's Guava (http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets) est légèrement plus agréable:

InputStream is = new ByteArrayInputStream( myString.getBytes(Charsets.UTF_8) );

Le jeu de caractères que vous utilisez dépend entièrement de ce que vous allez faire avec InputStream, bien sûr.

0
vorburger