Question

J'ai lu ce post mais je ne suis pas.J'ai vu ce mais je n'ai pas vu d'exemple approprié de conversion d'un ByteArrayInputStream à String utilisant un ByteArrayOutputStream.

Pour récupérer le contenu d'un ByteArrayInputStream comme un String, utilise un ByteArrayOutputstream recommandé ou existe-t-il un moyen plus préférable ?

j'envisageais cet exemple et prolonger ByteArrayInputStream et utiliser un Décorateur pour augmenter les fonctionnalités au moment de l’exécution.Tout intérêt à ce que cela soit une meilleure solution pour employer un ByteArrayOutputStream?

Était-ce utile?

La solution

UN ByteArrayOutputStream peut lire à partir de n'importe quel InputStream et à la fin donne 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 un ByteArrayInputStream available() donne le nombre total d'octets.


Réponse au commentaire :en utilisant 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, il peut y avoir n'importe quel InputStream.

Autres conseils

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);

Juste une ligne de code.

Utiliser 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 ayez 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top