4 votes

Convertir un byte[] en String en utilisant l'encodage binaire

Je veux traduire chaque byte d'un byte[] en un char et de mettre ces caractères dans une chaîne. C'est le codage dit "binaire" de certaines bases de données. Jusqu'à présent, le mieux que j'ai pu trouver est cet énorme texte passe-partout :

byte[] bytes = ...;
char[] chars = new char[bytes.length];
for (int i = 0; i < bytes.length; ++i) {
    chars[i] = (char) (bytes[i] & 0xFF);
}
String s = new String(chars);

Existe-t-il une autre option de Java SE ou peut-être d'Apache Commons ? J'aimerais avoir quelque chose comme ça :

final Charset BINARY_CS = Charset.forName("BINARY");
String s = new String(bytes, BINARY_CS);

Mais je ne suis pas prêt à écrire un Charset et ses codecs (pour l'instant). Existe-t-il un tel jeu de caractères binaire prêt à l'emploi dans le JRE ou dans Apache Commons ?

9voto

Peter Lawrey Points 229686

Vous pouvez utiliser le codage ASCII pour les caractères de 7 bits.

String s = "Hello World!";
byte[] b = s.getBytes("ASCII");
System.out.println(new String(b, "ASCII"));

ou ascii 8 bits

String s = "Hello World! \u00ff";
byte[] b = s.getBytes("ISO-8859-1");
System.out.println(new String(b, "ISO-8859-1"));

EDITAR

System.out.println("ASCII => " + Charset.forName("ASCII"));
System.out.println("US-ASCII => " + Charset.forName("US-ASCII"));
System.out.println("ISO-8859-1 => " + Charset.forName("ISO-8859-1"));

imprime

ASCII => US-ASCII
US-ASCII => US-ASCII
ISO-8859-1 => ISO-8859-1

1voto

Al Ferrell Points 1

Vous pourriez sauter l'étape d'un tableau de chars et mettre en String et même utiliser un StringBuilder (ou StringBuffer si vous êtes préoccupé par le multi-threading). Mon exemple montre StringBuilder.

byte[] bytes = ...;
StringBuilder sb = new StringBuilder(bytes.length);
for (int i = 0; i < bytes.length; i++) {
  sb.append((char) (bytes[i] & 0xFF));
}

return sb.toString();

Je sais que ça ne répond pas à votre autre question. Je cherche juste à vous aider à simplifier le code "passe-partout".

0voto

arasmussen Points 5752

Il existe un constructeur String qui prend un tableau d'octets et une chaîne spécifiant le format des octets :

String s = new String(bytes, "UTF-8");   // if the charset is UTF-8
String s = new String(bytes, "ASCII");   // if the charset is ASCII

0voto

havexz Points 6707

Vous pouvez utiliser l'encodage base64. Il existe une implémentation faite par apache

http://commons.apache.org/codec/

Base 64 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

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