web-dev-qa-db-fra.com

Comment convertir un tableau d'octets en ByteArrayOutputStream

J'ai besoin de convertir un tableau d'octets en ByteArrayOutputStream afin de pouvoir l'afficher à l'écran.

22
Arun
byte[] bytes = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
baos.write(bytes, 0, bytes.length);

Description de la méthode:

Écrit len ​​octets du tableau d'octets spécifié en commençant à l'offset dans ce flux de sortie du tableau d'octets.

43
Josh M

Vous ne pouvez pas afficher un ByteArrayOutputStream. Je suppose que vous essayez de faire

byte[] bytes = ...
String text = new String(bytes, "UTF-8"); // or some other encoding.
// display text.

Vous pouvez faire en sorte que ByteArrayOutputStream fasse quelque chose de similaire, mais ce n'est pas évident, efficace ou la meilleure pratique (car vous ne pouvez pas contrôler l'encodage utilisé)

0
Peter Lawrey

Avec JDK/11 , vous pouvez utiliser l'API writeBytes(byte b[]) qui appelle finalement la write(b, 0, b.length) comme suggéré dans la réponse de Josh =.

/**
 * Writes the complete contents of the specified byte array
 * to this {@code ByteArrayOutputStream}.
 *
 * @apiNote
 * This method is equivalent to {@link #write(byte[],int,int)
 * write(b, 0, b.length)}.
 *
 * @param   b     the data.
 * @throws  NullPointerException if {@code b} is {@code null}.
 * @since   11
 */
public void writeBytes(byte b[]) {
    write(b, 0, b.length);
}

L'exemple de code se transformerait simplement en -

byte[] bytes = new byte[100];
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
baos.writeBytes(bytes);
0
Naman