Convertir le flux en chaîne Java / Groovy
J'ai volé cet extrait sur le web. Mais il semble être limité à 4096 octets et est assez moche de l'OMI. Quelqu'un sait d'une meilleure approche? Je suis en fait l'utilisation de Groovy btw...
String streamToString(InputStream input) {
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
for (int n; (n = input.read(b)) != -1;) {
out.append(new String(b, 0, n));
}
return out.toString();
}
EDIT:
J'ai trouvé une meilleure solution dans Groovy:
InputStream exportTemplateStream = getClass().getClassLoader().getResourceAsStream("export.template")
assert exportTemplateStream: "[export.template stream] resource not found"
String exportTemplate = exportTemplateStream.text
source d'informationauteur phil swenson | 2011-04-29
Vous devez vous connecter pour publier un commentaire.
Des bons et des réponses rapides. Cependant, je pense que le meilleur est Groovy a ajouté une "getText" méthode de InputStream. Donc, tout ce que j'avais à faire était de
stream.text
. Et bon appel sur la 4096 commentaire.Pour Groovy
La référence de classe InputStream
La
getText()
sans codage, il va utiliser le système actuel d'encodage, ex ("UTF-8").Essayer
IOUtils
de Apache Commons:Vous pouvez le faire assez facilement à l'aide de la
Scanner
classe:C'est la lecture de l'entrée en blocs de 4096 octets(4 KO), mais la taille de la chaîne n'est pas limitée car elle permet de lire plus et d'ajouter à la SringBuffer.
Que l'extrait a un bug: si l'entrée utilise un multi-octets codage de caractères, il ya une bonne chance qu'un seul personnage va s'étendre sur deux lit (et pas convertible). Et il a aussi la semi-correction d'un bug qu'il s'appuie sur la plate-forme d'encodage par défaut.
Au lieu de cela, utiliser Jakarta Commons IO. En particulier, la version de
IOUtils.toString()
qui prend unInputStream
et applique un codage.Pour les futurs évaluateurs qui ont des problèmes similaires, veuillez noter que les deux IOUtils de Apache, et Groovy de InputStream.getText() la méthode nécessite que le flux complet, ou être fermée avant de retourner. Si vous travaillez avec un flux persistant, vous nead pour faire face à "laid" exemple que Phil posté, ou de travailler avec des non-bloquant IO.
Vous pouvez essayer quelque chose de semblable à ce