Apakah ada cara untuk mengkonversi Java String
ke byte[]
( bukan kotak Byte[]
)?
Dalam mencoba ini:
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());
dan saya mendapatkan output terpisah. Tidak dapat menampilkan keluaran pertama karena merupakan string gzip.
<A Gzip String>
******
[B@38ee9f13
Yang kedua adalah alamat. Apakah ada yang saya lakukan salah? Saya membutuhkan hasil dalam byte[]
untuk memberi makannya ke gzip decompressor, yaitu sebagai berikut.
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());
}
String.getBytes()
memang mengembalikan array byte, tetapi keyakinan Anda bahwatoString()
array byte akan mengembalikan hasil yang bermanfaat salah.Jawaban:
Objek yang
decompressGZIP()
dibutuhkan metode Anda adalah abyte[]
.Jadi jawaban dasar dan teknis untuk pertanyaan yang Anda ajukan adalah:
Namun masalah Anda tampaknya bergulat dengan ini adalah bahwa ini tidak ditampilkan dengan sangat baik. Memanggil
toString()
hanya akan memberi Anda defaultObject.toString()
yang merupakan nama kelas + alamat memori. Dalam hasil Anda[B@38ee9f13
,[B
saranabyte[]
dan38ee9f13
alamat memori, dipisahkan oleh@
.Untuk tujuan tampilan Anda dapat menggunakan:
Tetapi ini hanya akan ditampilkan sebagai urutan bilangan bulat yang dipisahkan koma, yang mungkin atau mungkin tidak seperti yang Anda inginkan.
Untuk mendapatkan
String
kembali yang dapat dibaca daribyte[]
, gunakan:Alasan
Charset
versi disukai, adalah bahwa semuaString
objek di Jawa disimpan secara internal sebagai UTF-16. Ketika mengkonversi kebyte[]
Anda akan mendapatkan rincian byte yang berbeda untuk mesin terbang yang diberikan ituString
, tergantung pada charset yang dipilih.sumber
string.getBytes(StandardCharsets.UTF_8)
juga dapat digunakan, dan itu sama denganstring.getBytes(Charset.forName("UTF-8"))
StandardCharsets
ini baru dengan Java 7Charset.forName("UTF-8")
membuat atau mengapa itu penting.sumber
Coba gunakan String.getBytes (). Ia mengembalikan byte [] yang mewakili data string. Contoh:
sumber
Secara sederhana:
sumber
abc
mengandung karakter non-ASCII, suka"greater than 2³² − 1"
atau hanya data biner (seperti " A b2")?�
string ini hanya memiliki 5 karakter. Namun ketika saya menggunakangetBytes()
saya mendapat 7 karakter.Anda dapat menggunakan
String.getBytes()
yang mengembalikanbyte[]
array.sumber
Anda mungkin ingin mencoba
return new String(byteout.toByteArray(Charset.forName("UTF-8")))
sumber
Tidak perlu mengubah java sebagai parameter String. Anda harus mengubah kode c untuk menerima sebuah String tanpa pointer dan dalam kode-nya:
sumber
Saya tahu saya sedikit terlambat untuk pesta tetapi ini bekerja cukup rapi (profesor kami memberikannya kepada kami)
sumber