SORU
13 Temmuz 2011, ÇARŞAMBA


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
13 Temmuz 2011, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • Pepsi

    Pepsi

    1 Kasım 2005