Kā pārvērst Java virkni baitos []?

Vai ir kāds veids, kā pārvērst Java String uz Byte[] (nevis Byte[])?

Mēģinot to:

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

un es saņemu atsevišķus rezultātus. Nevar parādīt 1. izvadi, jo tā ir gzip virkne.

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

Otrā ir adrese. Vai es kaut ko daru nepareizi? Man ir nepieciešams rezultāts byte[] formā, lai to ievadītu gzip dekompresoram, kas ir šāds.

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

Objekts, kas nepieciešams jūsu metodei decompressGZIP(), ir byte[].

Tātad pamata tehniskā atbilde uz jūsu uzdoto jautājumu ir šāda:

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

Tomēr problēma, ar kuru jūs, šķiet, cīnāties, ir tā, ka tas netiek parādīts ļoti labi. Izsaucot toString(), jūs saņemsiet tikai noklusējuma Object.toString(), kas ir klases nosaukums + atmiņas adrese. Rezultātā [B@38ee9f13``,[B`nozīmēbit[]un38ee9f13ir atmiņas adrese, atdalīta ar@`.

Lai parādītu informāciju, varat izmantot:

Arrays.toString(bytes);

Bet tas tiks parādīts kā komatiem atdalītu veselu skaitļu virkne, kas var būt vai nebūt tas, ko vēlaties.

Lai no bitiem[] iegūtu lasāmu stringu, izmantojiet:

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

Iemesls, kāpēc Charset versija ir ieteicamāka, ir tas, ka visi String objekti Java tiek iekšēji saglabāti kā UTF-16. Konvertējot uz byte[], atkarībā no izvēlētās rakstzīmju kopas, jūs iegūsiet atšķirīgu baitu sadalījumu dotajiem String glifiem.

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

Varat izmantot String.getBytes(), kas atgriež bitu[] masīvu.

Komentāri (0)