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());
}
503
3
Det objekt, som din metode
decompressGZIP()
har brug for, er enbyte[]
.Så det grundlæggende, tekniske svar på dit spørgsmål er:
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 standardObject.toString()
, som er klassens navn + hukommelsesadresse. I dit resultat[B@38ee9f13
, betyder[B
byte[]
og38ee9f13
er hukommelsesadressen, adskilt af et@
.Til visningsformål kan du bruge:
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 enbyte[]
, skal du bruge:Grunden til at
Charset
-versionen er foretrukket er, at alleString
-objekter i Java lagres internt som UTF-16. Når man konverterer til enbyte[]
får man en anden fordeling af bytes for de givne glyffer i den pågældendeString
, afhængigt af den valgte charset.Du kan bruge
String.getBytes()
, som returnerer arrayetbyte[]
.