Saya mencoba memahami byte [] ke string, representasi string dari byte [] ke byte [] konversi ... Saya mengkonversi byte saya [] ke string untuk dikirim, saya kemudian mengharapkan layanan web saya (ditulis dengan python) untuk menggemakan data langsung kembali ke klien.
Ketika saya mengirim data dari aplikasi Java saya ...
Arrays.toString(data.toByteArray())
Bytes untuk dikirim ..
[B@405217f8
Kirim (Ini adalah hasil dari Arrays.toString () yang seharusnya merupakan representasi string dari data byte saya, data ini akan dikirim melalui kawat):
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Di sisi python, server python mengembalikan sebuah string ke pemanggil (yang bisa saya lihat adalah sama dengan string yang saya kirim ke server
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Server harus mengembalikan data ini ke klien, di mana itu dapat diverifikasi.
Respons klien saya menerima (sebagai string) seperti
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Sepertinya saya tidak tahu cara mendapatkan kembali string yang diterima ke byte []
Apa pun yang saya coba saya akhirnya mendapatkan array byte yang terlihat sebagai berikut ...
[91, 45, 52, 55, 44, 32, 49, 44, 32, 49, 54, 44, 32, 56, 52, 44, 32, 50, 44, 32, 49, 48, 49, 44, 32, 49, 49, 48, 44, 32, 56, 51, 44, 32, 49, 49, 49, 44, 32, 49, 48, 57, 44, 32, 49, 48, 49, 44, 32, 51, 50, 44, 32, 55, 56, 44, 32, 55, 48, 44, 32, 54, 55, 44, 32, 51, 50, 44, 32, 54, 56, 44, 32, 57, 55, 44, 32, 49, 49, 54, 44, 32, 57, 55, 93]
atau saya bisa mendapatkan representasi byte yaitu sebagai berikut:
B@2a80d889
Keduanya berbeda dari data yang saya kirim ... Saya yakin saya kehilangan sesuatu yang sangat sederhana ....
Ada bantuan ?!
response
dalam jawaban saya, maka sayangnya tidak, tidak ada cara lain. Cara terbaik bagi Anda untuk menerima byte sebagai data mentah (sebagai biner) alih-alih string, atau mungkin bahkan sebagai string Base64, yang hanya mengharuskan Anda untuk mengubahnya kembali sebagai nilai 256 (biner) basis.Itu menghasilkan "string keren" ke konsol.
Sangat mudah.
sumber
byte[]
diterimanya diwakili sebagaiString
; yaitu"[97, 98, 99]"
tidak[97, 98, 99]
. Artinya, jawaban Anda bahkan tidak berlaku untuk situasi ini.String
untukbyte[]
untukString
. Saya pikir persyaratan dimaksud adalahbyte[]
untukString
untukbyte[]
.Apa yang saya lakukan:
kembali ke klien:
terima dari klien:
data Anda akan ditransfer dalam format ini:
sumber
Apa yang
Arrays.toString()
dilakukan adalah membuat representasi string dari setiap byte individual di byteArray Anda.Silakan periksa API Array dokumentasi dokumentasi
Untuk mengonversi string respons Anda kembali ke array byte asli, Anda harus menggunakan
split(",")
atau sesuatu dan mengubahnya menjadi koleksi dan kemudian mengonversi setiap item di sana menjadi byte untuk membuat ulang array byte Anda.sumber
Sederhana untuk mengubah byte array ke string dan string kembali ke byte array di java. kita perlu tahu kapan harus menggunakan 'baru' dengan cara yang benar. Itu bisa dilakukan sebagai berikut:
byte array ke konversi string:
Konversi array string ke byte:
Untuk detail lebih lanjut, lihat: http://evverythingatonce.blogspot.in/2014/01/tech-talkbyte-array-and-string.html
sumber
Jenis output yang Anda lihat dari array byte Anda (
[B@405217f8
) juga merupakan output untuk array byte panjang nol (yaitunew byte[0]
). Sepertinya string ini adalah referensi ke array daripada deskripsi isi array seperti yang mungkin kita harapkan daritoString()
metode koleksi reguler .Seperti halnya responden lain, saya akan mengarahkan Anda ke
String
konstruktor yang menerimabyte[]
parameter untuk membangun string dari isi array byte. Anda harus dapat membaca byte mentah dari soketInputStream
jika Anda ingin mendapatkan byte dari koneksi TCP.Jika Anda sudah membaca byte tersebut sebagai
String
(menggunakanInputStreamReader
), maka, string dapat dikonversi ke byte menggunakangetBytes()
fungsi. Pastikan untuk mengirimkan karakter yang Anda inginkan ke konstruktor dangetBytes()
fungsi String , dan ini hanya akan berfungsi jika data byte dapat dikonversi ke karakter olehInputStreamReader
.Jika Anda ingin berurusan dengan byte mentah, Anda harus benar-benar menghindari menggunakan layer pembaca aliran ini.
sumber
Bisakah Anda tidak hanya mengirim byte sebagai byte, atau mengkonversi setiap byte ke karakter dan mengirim sebagai string? Melakukannya seperti Anda akan mengambil minimal 85 karakter dalam string, ketika Anda hanya memiliki 11 byte untuk dikirim. Anda bisa membuat representasi string dari byte, jadi itu akan menjadi "[B @ 405217f8", yang dapat dengan mudah dikonversi ke
bytes
ataubytearray
objek dengan Python. Gagal itu, Anda bisa mewakili mereka sebagai serangkaian digit heksadesimal ("5b42403430353231376638") yang mengambil 22 karakter, yang dapat dengan mudah didekodekan pada sisi Python menggunakanbinascii.unhexlify()
.sumber
[B@405217f8
adalah ID objek Java dari array, bukan konten array. ID objek tentu tidak dapat "dengan mudah dikonversi ke byte atau objek bytearray dengan python". Ukuran terbaik yang dapat Anda lakukan adalah mengonversi byte [] ke string base64.[JDK8]
Ke string:
Ke byte array:
sumber
Jika Anda ingin mengubah string kembali menjadi array byte Anda harus menggunakan
String.getBytes()
(atau fungsi Python yang setara) dan ini akan memungkinkan Anda mencetak array byte asli.sumber
Gunakan API kode di bawah ini untuk mengonversi bytecode sebagai string ke array Byte.
sumber
[JAVA 8]
sumber