Există vreo modalitate de a converti Java String
într-un byte[]
(nu în caseta Byte[]
)?
Încercând acest lucru:
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());
și primesc ieșiri separate. Nu pot afișa prima ieșire deoarece este un șir gzip.
<A Gzip String>
******
[B@38ee9f13
Al doilea este o adresă. Este ceva ce fac greșit? Am nevoie de rezultat într-un byte[]
pentru a-l introduce în descompactorul gzip, care este după cum urmează.
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());
}
Obiectul de care are nevoie metoda dvs. decompressGZIP()
este un byte[]
.
Așadar, răspunsul tehnic de bază la întrebarea pe care ați pus-o este:
byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only
Cu toate acestea, problema cu care se pare că vă confruntați este că acest lucru nu se afișează foarte bine. Apelarea toString()
vă va da doar valoarea implicită Object.toString()
care este numele clasei + adresa de memorie. În rezultatul dvs. [B@38ee9f13
, [B
înseamnă byte[]
și 38ee9f13
este adresa de memorie, separate de un @
.
În scopul afișării, puteți folosi:
Arrays.toString(bytes);
Dar acest lucru va fi afișat ca o secvență de numere întregi separate prin virgulă, ceea ce poate fi sau nu ceea ce doriți.
Pentru a obține un String
lizibil de la un byte[]
, utilizați:
String string = new String(byte[] bytes, Charset charset);
Motivul pentru care este preferată versiunea Charset
este acela că toate obiectele String
din Java sunt stocate intern ca UTF-16. La conversia într-un byte[]
veți obține o defalcare diferită a octeților pentru glifele date ale acelui String
, în funcție de setul de caractere ales.