Ich versuche, ein Byte [] in einen String zu verstehen, eine String-Darstellung der Konvertierung von Byte [] in Byte [] ... Ich konvertiere mein Byte [] in einen zu sendenden String und erwarte dann meinen Webdienst (in Python geschrieben). um die Daten direkt an den Client zurückzugeben.
Wenn ich die Daten von meiner Java-Anwendung sende ...
Arrays.toString(data.toByteArray())
Zu sendende Bytes ..
[B@405217f8
Senden (Dies ist das Ergebnis von Arrays.toString (), das eine Zeichenfolgendarstellung 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 Zeichenfolge an den Aufrufer zurück (die meiner Ansicht nach mit der Zeichenfolge übereinstimmt, die ich an den Server gesendet 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 Zeichenfolge), sieht aus
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Ich kann anscheinend nicht herausfinden, wie ich die empfangene Zeichenfolge wieder in ein Byte umwandeln kann []
Was auch immer ich zu versuchen scheine, am Ende bekomme ich 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 Bytedarstellung erhalten, die wie folgt lautet:
B@2a80d889
Beide unterscheiden sich von meinen gesendeten Daten ... Ich bin sicher, ich vermisse etwas wirklich Einfaches ...
Irgendeine Hilfe?!
response
in meiner Antwort analysiert werden muss , gibt es leider keinen anderen Weg. Am besten empfangen Sie die Bytes als Rohdaten (als Binärdaten) anstelle einer Zeichenfolge oder sogar als Base64-Zeichenfolge, sodass Sie sie nur als Basis-256-Wert (Binärwert) zurückkonvertieren müssen.Das gibt "cool string" an die Konsole aus.
Es ist verdammt einfach.
quelle
byte[]
er empfängt, als dargestellt wirdString
; dh"[97, 98, 99]"
nicht[97, 98, 99]
. Das heißt, Ihre Antwort trifft nicht einmal auf diese Situation zu.String
bisbyte[]
aufString
. Ich denke , die Frage Forderung istbyte[]
zuString
zubyte[]
.Was ich getan habe:
Rückkehr zu den Kunden:
von Kunden erhalten:
Ihre Daten werden in diesem Format übertragen:
quelle
Sie
Arrays.toString()
erstellen eine Zeichenfolgendarstellung für jedes einzelne Byte in Ihrem byteArray.Bitte überprüfen Sie die API-Dokumentation Arrays API
Um Ihre Antwortzeichenfolge wieder in das ursprüngliche Byte-Array zu konvertieren, müssen Sie
split(",")
oder etwas verwenden und es in eine Sammlung konvertieren und dann jedes einzelne Element dort in ein Byte konvertieren, um Ihr Byte-Array neu zu erstellen.quelle
Es ist einfach, Byte-Array in String und String zurück in Byte-Array in Java zu konvertieren. Wir müssen wissen, wann wir 'new' richtig einsetzen müssen. Dies kann wie folgt erfolgen:
Umwandlung von Byte-Array in String:
Konvertierung von Zeichenfolgen in Byte-Arrays:
Weitere Informationen finden Sie unter: http://evverythingatonce.blogspot.in/2014/01/tech-talkbyte-array-and-string.html
quelle
Die Art der Ausgabe, die Sie von Ihrem Byte-Array (
[B@405217f8
) sehen, ist auch eine Ausgabe für ein Byte-Array mit der Länge Null (dhnew byte[0]
). Es sieht so aus, als ob diese Zeichenfolge eher eine Referenz auf das Array als eine Beschreibung des Inhalts des Arrays ist, wie wir es von dertoString()
Methode einer regulären Sammlung erwarten können .Wie bei anderen Befragten würde ich Sie auf die
String
Konstruktoren verweisen , die einenbyte[]
Parameter akzeptieren , um eine Zeichenfolge aus dem Inhalt eines Byte-Arrays zu erstellen. Sie sollten in der Lage sein, Rohbytes von einem Socket zu lesen,InputStream
wenn Sie Bytes von einer TCP-Verbindung erhalten möchten.Wenn Sie diese Bytes bereits als
String
(mit einemInputStreamReader
) gelesen haben , kann die Zeichenfolge mit dergetBytes()
Funktion in Bytes konvertiert werden . Stellen Sie sicher, dass Sie den gewünschten Zeichensatz sowohl an den String-Konstruktor als auch an diegetBytes()
Funktionen übergeben. Dies funktioniert nur, wenn die Byte-Daten von der in Zeichen umgewandelt werden könnenInputStreamReader
.Wenn Sie mit Rohbytes umgehen möchten, sollten Sie die Verwendung dieser Stream-Reader-Schicht wirklich vermeiden.
quelle
Können Sie die Bytes nicht einfach als Bytes senden oder jedes Byte in ein Zeichen konvertieren und als Zeichenfolge senden? Wenn Sie es so machen, wie Sie es sind, werden mindestens 85 Zeichen in der Zeichenfolge benötigt, wenn Sie nur 11 Bytes senden müssen. Sie können eine Zeichenfolgendarstellung der Bytes erstellen, also "[B @ 405217f8", die in Python problemlos in ein
bytes
oderbytearray
-Objekt konvertiert werden kann . Andernfalls können Sie sie als eine Reihe von hexadezimalen Ziffern ("5b42403430353231376638") darstellen, die 22 Zeichen enthalten und auf der Python-Seite mit einfach dekodiert werden könnenbinascii.unhexlify()
.quelle
[B@405217f8
ist die Java-Objekt-ID des Arrays, nicht der Inhalt des Arrays. Die Objekt-ID kann sicherlich nicht "einfach in ein Byte- oder Bytearray-Objekt in Python konvertiert werden". Das Beste, was Sie in Bezug auf die Größe tun können, ist, das Byte [] in eine Base64-Zeichenfolge zu konvertieren.[JDK8]
Zum String:
Byte-Array:
quelle
Wenn Sie die Zeichenfolge wieder in ein Byte-Array konvertieren möchten, müssen Sie
String.getBytes()
(oder eine entsprechende Python-Funktion) verwenden. Auf diese Weise können Sie das ursprüngliche Byte-Array ausdrucken.quelle
Verwenden Sie die folgende Code-API, um Bytecode als Zeichenfolge in Byte-Array zu konvertieren.
quelle
[JAVA 8]
quelle