4379 votes

Lecture/convertir un InputStream vers une chaîne

Si vous avez des d’objet, comment faut-il traiter cet objet ou produire un ?


Supposons que j’ai un qui contient des données textuelles, et je veux convertir cela pour un (par exemple, si je peux écrire le contenu du flux dans un fichier journal).

Ce qui est la meilleure façon de prendre le et le convertir à un ?

2713voto

Harry Lime Points 8229

Une belle façon de procéder est d’utiliser Apache commonspour copier le dans un `` ... quelque chose comme

Sinon, vous pourriez utiliser `` si vous ne souhaitez pas mélanger vos volets et les écrivains

2338voto

Pavel Repin Points 13751

Voici un chemin à l'aide uniquement de la bibliothèque standard de Java (à noter que le flux n'est pas fermé, YMMV).

static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

J'ai appris ce truc de "Stupide Scanner astuces" de l'article. La raison pour laquelle cela fonctionne est que le Scanner effectue une itération sur les jetons dans le ruisseau, et dans ce cas, nous avons séparé les jetons à l'aide de "début de l'entrée de la frontière" (\A), nous donnant ainsi un seul jeton pour l'ensemble du contenu du flux.

Remarque, si vous avez besoin d'être précis sur les flux d'entrée de l'encodage, vous pouvez fournir le deuxième argument Scanner constructeur qui indique le jeu de caractères à utiliser (par exemple, "UTF-8").

Chapeau conseil vaut également pour Jacob, qui une fois m'a signalé cet article.

MODIFIÉ: Grâce à une suggestion de Patrick, fait la fonction plus robuste lors de la manipulation d'un vide flux d'entrée. Un de plus edit: mis son veto try/catch, Patrick manière plus laconique.

870voto

Chinnery Points 5830

Apache Commons permet :

Bien sûr, vous pourriez choisir d’autres codages de caractères, sans compter que UTF-8.

Voir aussi : (Docs)

308voto

Paul de Vrieze Points 3715

Tenant de fichier compte un doit d’abord obtenir un instance. Cela peut être lus et ajouté à un (il ne faut pas si nous ne sommes pas y accéder dans plusieurs threads, et est plus rapide). L’astuce ici est que nous travaillons dans des blocs et ainsi n’ont pas besoin d’autres flux de mise en mémoire tampon. La taille du bloc est paramétrée pour l’optimisation des performances d’exécution.

260voto

sampathpremarathna Points 2080
Que dis-tu de ça ?

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