Java Bayt Dizisinden Dizeye Bayt Dizisi

Bir byte[]'dan string'e, byte[]'dan byte[]'a dönüşümün string gösterimini anlamaya çalışıyorum... Göndermek için byte[]'ımı bir dizeye dönüştürüyorum, daha sonra web hizmetimin (python'da yazılmış) verileri doğrudan istemciye geri yankılamasını bekliyorum.

Java uygulamamdan veri gönderdiğimde...

Arrays.toString(data.toByteArray())

Gönderilecek baytlar..

[B@405217f8

Send (Bu, bayt verilerimin bir dize gösterimi olması gereken Arrays.toString() işleminin sonucudur, bu veriler kablo üzerinden gönderilecektir):

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

Python tarafında, python sunucusu arayan kişiye bir dize döndürüyor (sunucuya gönderdiğim dizeyle aynı olduğunu görebiliyorum

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

Sunucu bu veriyi doğrulanabileceği istemciye geri göndermelidir.

İstemcimin aldığı yanıt (bir dize olarak) şöyle görünür

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

Alınan dizeyi bir dizeye nasıl geri getireceğimi bulamıyorum byte[]

Ne denersem deneyeyim, sonunda aşağıdaki gibi görünen bir bayt dizisi elde ediyorum...

[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]

ya da aşağıdaki gibi bir bayt gösterimi elde edebilirim:

B@2a80d889

Bunların her ikisi de benim gönderdiğim verilerden farklı... Eminim gerçekten basit bir şeyi kaçırıyorum....

Yardım eder misin?!

Çözüm

Dönen dizeyi alıp ondan bir dize oluşturamazsınız... bu artık bir byte[] veri türü değildir, zaten bir dizedir; onu ayrıştırmanız gerekir. Örneğin:


String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]";      // response from the Python script

String[] byteValues = response.substring(1, response.length() - 1).split(",");
byte[] bytes = new byte[byteValues.length];

for (int i=0, len=bytes.length; i
Yorumlar (4)

Arrays.toString()`in yaptığı şey, byteArray'inizdeki her bir baytın bir dize temsilini oluşturmaktır.

Lütfen API belgelerini kontrol edin Diziler API

Yanıt dizenizi orijinal bayt dizisine geri dönüştürmek için, split(",") veya başka bir şey kullanmanız ve bunu bir koleksiyona dönüştürmeniz ve ardından bayt dizinizi yeniden oluşturmak için buradaki her bir öğeyi bir bayta dönüştürmeniz gerekir.

Yorumlar (0)

Baytları sadece bayt olarak gönderemez misiniz veya her baytı bir karaktere dönüştürüp bir dize olarak gönderemez misiniz? Gönderilecek yalnızca 11 baytınız varken, sizin yaptığınız gibi yapmak dizede en az 85 karakter kaplayacaktır. Baytların bir dizge gösterimini oluşturabilirsiniz, böylece "[B@405217f8" olur, bu da Python'da kolayca bir bytes veya bytearray nesnesine dönüştürülebilir. Bunu yapamazsanız, bunları 22 karakterden oluşan bir dizi onaltılık basamak ("5b42403430353231376638") olarak gösterebilirsiniz, bu da Python tarafında binascii.unhexlify() kullanılarak kolayca çözülebilir.

Yorumlar (2)