Java Bayt Dizisi için bir Dize Dizisi
Ben anlamak için bir byte [], string, string temsil byte[] bayt[] dönüşüm... ben dönüştürmek benim byte[] bir dize olarak gönder, ben sonra bekliyoruz benim web service (python ile yazılmış) echo veri doğruca istemci.
Java uygulama verileri gönderiyorum
Arrays.toString(data.toByteArray())
.. Göndermek için bayt
[B@405217f8
(Bu Dizi bir sonucudur.bayt veri, bu veri kablo üzerinden gönderilir) dize halinde temsilini olmalıdır) sağlar:
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Python tarafında, python sunucu arayan bir dize döndürür (ki ben dize ben sunucuya gönderilen aynı olduğunu görebilirsiniz
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Sunucu ispatlanabilir nerede istemci bu verileri dönmelidir.
Müvekkilim aldığı yanıt (bir string olarak) gibi görünüyor
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Alınan bir dize geri almak için nasıl anlamaya görünüyor olamaz byte[]
Deneyin gibiyim her ne kadar aşağıdaki gibi... görünen bir bayt dizisi verdiler
[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 olan bir bayt temsil alabilirim
B@2a80d889
Bunların her ikisi de benim gönderilen veri farklıdır... eminim bir şey gerçekten basit kaçırıyorum....
Herhangi bir yardım?!
CEVAP
Sadece döndürülen dize almak ve bir dize inşa edemezsin... byte[]
veri türü değil artık, zaten bir dize var; bunu ayrıştırmak 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<len; i ) {
bytes[i] = Byte.parseByte(byteValues[i].trim());
}
String str = new String(bytes);
**EDİT**
Bir ipucu sorunun içinde soru, nereye söylüyorsun "Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...
", çünkü 91
bayt değeri için [
[91, 45, ...
bayt dizisi dize "[-45, 1, 16, ...
" dizesi.
Yöntemi Arrays.toString()
belirtilen dizi; dönen değer bir dizi artık olmayacak anlamı String
gösterimini döndürür. Örneğin :
byte[] b1 = new byte[] {97, 98, 99};
String s1 = Arrays.toString(b1);
String s2 = new String(b1);
System.out.println(s1); // -> "[97, 98, 99]"
System.out.println(s2); // -> "abc";
, s1
dize gösterimini tutar görebildiğiniz gibidizis2
dize gösterimini tutarken b1
,baytb1
içeriyordu.
Şimdi, senin sorunun, senin server string s1
, dizi gösterimini geri getirmek için, tam tersi yapıcı yöntemini gerekir bu nedenle benzer döndürür. s2.getBytes()
new String(b1)
, tam tersi ise Arrays.toString(b1)
, böylece bu cevap ilk parçasında yapıştırdım kodu tersini bulmak gerekir.
Java Bayt Dizisi için bir Dize Dizisi...
Bir kodlama kullanmadan bayt dizisi iç...
Nasıl Onaltılık Dize ve Başkan versa i...
Java Dize dizisi için ArrayList içeren...
Bir bayt dizisi Java kullanarak bir he...