web-dev-qa-db-fra.com

Comment convertir Java chaîne en octet []?

Existe-t-il un moyen de convertir Java String en un byte[] (non le Byte[] encadré] _)?

En essayant ceci:

System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());

et je reçois des sorties séparées. Impossible d'afficher la première sortie car il s'agit d'une chaîne gzip.

<A Gzip String>
******
[B@38ee9f13

La seconde est une adresse. Y a-t-il quelque chose que je fais mal? J'ai besoin du résultat dans un byte[] pour l'envoyer au décompresseur gzip, comme suit.

String decompressGZIP(byte[] gzip) throws IOException {
    Java.util.Zip.Inflater inf = new Java.util.Zip.Inflater();
    Java.io.ByteArrayInputStream bytein = new Java.io.ByteArrayInputStream(gzip);
    Java.util.Zip.GZIPInputStream gzin = new Java.util.Zip.GZIPInputStream(bytein);
    Java.io.ByteArrayOutputStream byteout = new Java.io.ByteArrayOutputStream();
    int res = 0;
    byte buf[] = new byte[1024];
    while (res >= 0) {
        res = gzin.read(buf, 0, buf.length);
        if (res > 0) {
            byteout.write(buf, 0, res);
        }
    }
    byte uncompressed[] = byteout.toByteArray();
    return (uncompressed.toString());
}
492
Mkl Rjv

L'objet dont votre méthode decompressGZIP() a besoin est un byte[].

La réponse technique de base à la question que vous avez posée est donc la suivante:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only

Cependant, le problème avec lequel vous semblez être confronté est que cela ne s'affiche pas très bien. L'appel de toString() vous donnera simplement la valeur par défaut Object.toString() qui est le nom de la classe + l'adresse de la mémoire. Dans votre résultat [B@38ee9f13, le [B signifie byte[] et 38ee9f13 est l'adresse de la mémoire, séparée par un @.

Pour l'affichage, vous pouvez utiliser:

Arrays.toString(bytes);

Mais cela ne fera que s'afficher sous la forme d'une séquence d'entiers séparés par des virgules, ce qui peut être ou ne pas être ce que vous voulez.

Pour obtenir une String lisible d'un byte[], utilisez:

String string = new String(byte[] bytes, Charset charset);

Si la version Charset est privilégiée, tous les objets String de Java sont stockés en interne sous le format UTF-16. Lors de la conversion en un byte[], vous obtiendrez une répartition différente des octets pour les glyphes donnés de cette String, en fonction du jeu de caractères choisi.

888
Stewart
  String example = "Convert Java String";
  byte[] bytes = example.getBytes();
50
Prabhakaran

Essayez d’utiliser String.getBytes (). Il retourne un octet [] représentant les données de chaîne. Exemple:

String data = "sample data";
byte[] byteData = data.getBytes();
14
Ankur Shanbhag

Simplement:

String abc="abcdefghight";

byte[] b = abc.getBytes();
14
Bhavesh

Vous pouvez utiliser String.getBytes() qui renvoie le tableau byte[].

11
Vimal Bera

Vous voudrez peut-être essayer return new String(byteout.toByteArray(Charset.forName("UTF-8")))

7
Lucas Hoepner

Il n'est pas nécessaire de changer Java en tant que paramètre String. Vous devez changer le code c pour recevoir une chaîne sans pointeur et dans son code:

Bool DmgrGetVersion (String szVersion);

Char NewszVersion [200];
Strcpy (NewszVersion, szVersion.t_str ());
.t_str () applies to builder c ++ 2010
1
Yardack