164 votes

Écrire une chaîne dans le flux de sortie

J'ai plusieurs de sortie auditeurs de la mise en œuvre de OutputStream. Il peut être PrintStream écrit sur la sortie standard ou dans un Fichier, il peut être écrit à la mémoire ou toute autre destination de sortie, donc j'ai spécifié OutputStream comme argument dans la méthode.

J'ai de la réception de la Chaîne. Quelle est la meilleure façon de les écrire pour les cours d'eau ici?

Juste pour l'utilisation de l'Écrivain.write(message.getBytes())? Je donne des octets mais si la destination de flux de flux de caractères, puis il va les convertir automatiquement?

Ai-je besoin d'utiliser ici un rapprochement des flux?

Je vous remercie.

167voto

MForster Points 2206

Cours d'eau (InputStream et OutputStream) de transfert binaire de données. Si vous voulez écrire une chaîne de caractères à un flux de données, vous devez d'abord le convertir en octets, ou en d'autres termes encoder . Vous pouvez le faire manuellement (comme vous le suggérez) à l'aide de l' String.getBytes(Charset) méthode, mais vous devriez éviter l' String.getBytes() méthode, parce qu'utilise l'encodage par défaut de la machine, qui ne peut pas être prédite de manière fiable dans un format portable.

La manière habituelle d'écrire des données de caractère à un flux, cependant, est d'encapsuler le flux en Writer, ( PrintWriter), qui fait la conversion pour vous lorsque vous appelez sa write(String) (ou print(String)) de la méthode. Le correspondant de l'enveloppe pour InputStreams est un Lecteur.

PrintStream est un spécial OutputStream mise en œuvre dans le sens qu'elle peut aussi contenir des méthodes que les encoder automatiquement les chaînes (il utilise un écrivain en interne). Mais il est encore un ruisseau. Vous pouvez envelopper votre flux de données avec un écrivain peu importe si c'est un PrintStream ou certains autres flux de mise en œuvre. Il n'y a pas de danger de double encodage.

126voto

Peter Knego Points 57985

OutputStream écrit des octets, String fournit des caractères. Vous devez définir Charset pour encoder chaîne en octet []:

 outputStream.write(string.getBytes(Charset.forName("UTF-8")));
 

Changez UTF-8 en un jeu de caractères de votre choix.

35voto

Shaman Points 1649

Vous pouvez créer un PrintStream enveloppant votre OutputStream, puis appeler simplement print (String):

 final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
 

13voto

NG. Points 12989

Enveloppez votre OutputStream avec un PrintWriter et utilisez les méthodes d’impression de cette classe. Ils prennent une ficelle et font le travail pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X