Java Byte-Array zu String zu Byte-Array

Ich versuche, ein Byte[] zu String, String-Darstellung von Byte[] zu Byte[] Konvertierung zu verstehen... Ich konvertiere meine byte[] zu einer Zeichenfolge zu senden, ich erwarte dann meine Web-Service (in Python geschrieben), um die Daten direkt zurück an den Client Echo.

Wenn ich die Daten aus meiner Java-Anwendung sende...

Arrays.toString(data.toByteArray())

Zu sendende Bytes...

[B@405217f8

Senden (Dies ist das Ergebnis von Arrays.toString(), das eine String-Repräsentation meiner Byte-Daten sein sollte, diese Daten werden über die Leitung gesendet):

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

Auf der Python-Seite gibt der Python-Server eine Zeichenkette an den Aufrufer zurück (die, wie ich sehen kann, mit der Zeichenkette übereinstimmt, die ich an den Server geschickt habe

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

Der Server sollte diese Daten an den Client zurückgeben, wo sie überprüft werden können.

Die Antwort, die mein Client erhält (als String), sieht so aus

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

Ich kann nicht herausfinden, wie ich die empfangene Zeichenkette zurück in ein byte[]

Egal, was ich versuche, ich erhalte ein Byte-Array, das wie folgt aussieht...

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

oder ich kann eine Byte-Darstellung erhalten, die wie folgt aussieht:

B@2a80d889

Beide unterscheiden sich von meinen gesendeten Daten... Ich bin sicher, ich übersehe etwas wirklich einfaches....

Irgendeine Hilfe?!

Lösung

Sie können nicht einfach die zurückgegebene Zeichenkette nehmen und eine Zeichenkette daraus konstruieren... es ist kein Byte[] Datentyp mehr, es ist bereits eine Zeichenkette; Sie müssen sie parsen. Zum Beispiel :


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
Kommentare (4)

Mit "Arrays.toString()" wird eine Zeichenkettendarstellung für jedes einzelne Byte in Ihrem ByteArray erstellt.

Bitte lesen Sie die API-Dokumentation Arrays API

Um die Antwortzeichenkette wieder in das ursprüngliche Byte-Array umzuwandeln, müssen Sie split(",") oder etwas Ähnliches verwenden und es in eine Sammlung umwandeln und dann jedes einzelne Element darin in ein Byte umwandeln, um Ihr Byte-Array neu zu erstellen.

Kommentare (0)

Können Sie die Bytes nicht einfach als Bytes senden, oder jedes Byte in ein Zeichen umwandeln und als Zeichenkette senden? Wenn Sie so vorgehen, benötigt die Zeichenkette mindestens 85 Zeichen, obwohl Sie nur 11 Bytes zu senden haben. Sie könnten eine String-Darstellung der Bytes erstellen, also "[B@405217f8", die leicht in ein bytes- oder bytearray-Objekt in Python umgewandelt werden kann. Andernfalls könnte man sie als eine Reihe von hexadezimalen Ziffern darstellen ("5b42403430353231376638"), die 22 Zeichen umfassen, die auf der Python-Seite mit binascii.unhexlify() leicht dekodiert werden könnten.

Kommentare (2)