J'ai lu ce post mais je ne suis pas. J'ai vu this mais je n'ai pas vu un bon exemple de conversion d'un ByteArrayInputStream
en String
en utilisant un ByteArrayOutputStream
.
Pour récupérer le contenu d'un ByteArrayInputStream
en tant que String
, est-il recommandé d'utiliser un ByteArrayOutputstream
ou existe-t-il un moyen plus préférable?
Je considérais cet exemple et étendre ByteArrayInputStream
et utiliser un Decorator pour augmenter les fonctionnalités au moment de l'exécution. Tout intérêt à ce que ce soit une meilleure solution pour utiliser un ByteArrayOutputStream
?
Un ByteArrayOutputStream
peut lire à partir de n'importe quel InputStream
et à la fin produire un byte[]
.
Cependant avec un ByteArrayInputStream
c'est plus simple:
int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.
Pour une ByteArrayInputStream
available()
donne le nombre total d'octets.
Réponse au commentaire: utilisation de ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
int nread = in.read(buf, 0, buf.length);
if (nread <= 0) {
break;
}
baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();
Ici peut être n'importe quel InputStream.
Pourquoi personne n'a mentionné org.Apache.commons.io.IOUtils
?
import Java.nio.charset.StandardCharsets;
import org.Apache.commons.io.IOUtils;
String result = IOUtils.toString(in, StandardCharsets.UTF_8);
Une seule ligne de code.
Utilisez Scanner
et passez à son constructeur le ByteArrayInputStream
puis lisez les données de votre scanner, vérifiez cet exemple:
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
data = scanner.next();
System.out.println(data);
Utiliser l'encodage Base64
En supposant que vous avez obtenu votre ByteArrayOutputStream:
ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));
Voir http://docs.Oracle.com/javase/8/docs/api/Java/util/Base64.Encoder.html