Sådan konverteres Java String til byte[]?

Er der nogen måde at konvertere Java String til en byte[] (ikke den boksede Byte[])?

Ved at prøve dette:

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

og jeg får separate output. Kan ikke vise 1. output, da det er en gzip-streng.

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

Den anden er en adresse. Er der noget jeg gør forkert? Jeg har brug for resultatet i en byte[] for at fodre det til gzip-dekompressor, som er som følger.

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());
}
Løsning

Det objekt, som din metode decompressGZIP() har brug for, er en byte[].

Så det grundlæggende, tekniske svar på dit spørgsmål er:

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

Men det problem, du synes at kæmpe med, er, at dette ikke vises særlig godt. Ved at kalde toString() får du bare standard Object.toString(), som er klassens navn + hukommelsesadresse. I dit resultat [B@38ee9f13, betyder [B byte[] og 38ee9f13 er hukommelsesadressen, adskilt af et @.

Til visningsformål kan du bruge:

Arrays.toString(bytes);

Men dette vil blot blive vist som en sekvens af komma-separerede hele tal, hvilket måske ikke er det, du ønsker.

For at få en læsbar String tilbage fra en byte[], skal du bruge:

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

Grunden til at Charset-versionen er foretrukket er, at alle String-objekter i Java lagres internt som UTF-16. Når man konverterer til en byte[] får man en anden fordeling af bytes for de givne glyffer i den pågældende String, afhængigt af den valgte charset.

Kommentarer (9)
  String example = "Convert Java String";
  byte[] bytes = example.getBytes();
Kommentarer (1)

Du kan bruge String.getBytes(), som returnerer arrayet byte[].

Kommentarer (0)