600 Stimmen

Wie konvertiert man einen Java-String in ein Byte[]?

Gibt es einen Weg, Java String in ein byte[] zu konvertieren (nicht das verpackte Byte[])?

Wenn ich dies versuche:

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

und ich bekomme separate Ausgaben. Kann die erste Ausgabe nicht anzeigen, da es sich um einen gzip-String handelt.

******
[B@38ee9f13

Die zweite ist eine Adresse. Mache ich etwas falsch? Ich brauche das Ergebnis in einem byte[], um es dem Gzip-Dekompressor zuzuführen, der wie folgt aussieht.

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

1054voto

Stewart Punkte 18039

Das Objekt, das Ihre Methode decompressGZIP() benötigt, ist ein byte[].

Also ist die grundlegende technische Antwort auf die gestellte Frage:

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

Das Problem, mit dem Sie anscheinend kämpfen, ist jedoch, dass dies nicht sehr gut angezeigt wird. Wenn Sie toString() aufrufen, erhalten Sie nur das Standard-Object.toString(), das der Klassenname + Speicheradresse ist. In Ihrem Ergebnis [B@38ee9f13 bedeutet das [B byte[] und 38ee9f13 ist die Speicheradresse, getrennt durch ein @.

Zu Anzeigezwecken können Sie verwenden:

Arrays.toString(bytes);

Aber dies wird nur als Sequenz von kommaseparierten Ganzzahlen angezeigt, was möglicherweise nicht das ist, was Sie möchten.

Um von einem byte[] wieder einen lesbaren String zu erhalten, verwenden Sie:

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

Der Grund, warum die Version mit Charset bevorzugt wird, ist, dass alle String-Objekte in Java intern als UTF-16 gespeichert werden. Bei der Umwandlung in ein byte[] erhalten Sie eine unterschiedliche Aufschlüsselung der Bytes für die angegebenen Glyphen dieses String, abhängig vom gewählten Zeichensatz.

65voto

  String beispiel = "Java String konvertieren";
  byte[] bytes = beispiel.getBytes();

17voto

Bhavesh Punkte 889

Einfach:

String abc="abcdefghight";

byte[] b = abc.getBytes();

15voto

Ankur Shanbhag Punkte 7586

Versuchen Sie, String.getBytes() zu verwenden. Es gibt ein byte[] zurück, das String-Daten darstellt. Beispiel:

String data = "Beispiel Daten";
byte[] byteData = data.getBytes();

11voto

Vimal Bera Punkte 10346

Sie können String.getBytes() verwenden, das das byte[]-Array zurückgibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X