Java String
i bir byte[]
a (not the boxed Byte[]
) dönüştürmenin herhangi bir yolu var mı?
Bunu denerken:
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());
ve ayrı çıkışlar alıyorum. Bir gzip dizesi olduğu için 1. çıktı görüntülenemiyor.
<A Gzip String>
******
[B@38ee9f13
İkincisi ise bir adrestir. Yanlış yaptığım bir şey var mı? Sonucu aşağıdaki gibi gzip dekompresörüne beslemek için bir byte[]
içinde ihtiyacım var.
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());
}
Yönteminiz decompressGZIP()
in ihtiyaç duyduğu nesne bir byte[]
dır.
Yani sorduğunuz sorunun temel, teknik cevabı şudur:
byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only
Bununla birlikte, boğuşuyor gibi göründüğünüz sorun, bunun çok iyi görüntülenmemesidir. toString()çağrısı size sadece sınıf adı + bellek adresi olan varsayılan
Object.toString()değerini verecektir. Sonucunuzda
[B@38ee9f13,
[B`byte[]
anlamına gelir ve 38ee9f13
@
ile ayrılmış bellek adresidir.
Görüntüleme amacıyla kullanabilirsiniz:
Arrays.toString(bytes);
Ancak bu sadece virgülle ayrılmış tam sayılar dizisi olarak görüntülenecektir, bu da istediğiniz şey olabilir veya olmayabilir.
Bir byte[]
dan okunabilir bir String
elde etmek için şunu kullanın:
String string = new String(byte[] bytes, Charset charset);
Charsetversiyonunun tercih edilmesinin nedeni, Java'daki tüm
Stringnesnelerinin dahili olarak UTF-16 olarak saklanmasıdır. Bir
byte[]a dönüştürürken, seçilen charset
e bağlı olarak bu String
in verilen glifleri için farklı bir bayt dökümü elde edersiniz.