J'essaye de comprendre un octet [] en chaîne, représentation sous forme de chaîne d'octet [] en octet [] conversion ... Je convertis mon octet [] en chaîne à envoyer, j'attends alors mon service web (écrit en python) pour renvoyer les données directement au client.
Lorsque j'envoie les données depuis mon application Java ...
Arrays.toString(data.toByteArray())
Octets à envoyer.
[B@405217f8
Envoyer (Ceci est le résultat de Arrays.toString () qui devrait être une représentation sous forme de chaîne de mes données d'octet, ces données seront envoyées à travers le fil):
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Du côté python, le serveur python renvoie une chaîne à l'appelant (que je peux voir est la même que la chaîne que j'ai envoyée au serveur
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Le serveur doit renvoyer ces données au client, où elles peuvent être vérifiées.
La réponse que mon client reçoit (sous forme de chaîne) ressemble à
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
Je n'arrive pas à comprendre comment récupérer la chaîne reçue dans un octet []
Quoi que je semble essayer, je finis par obtenir un tableau d'octets qui ressemble à ce qui suit ...
[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]
ou je peux obtenir une représentation d'octet qui est la suivante:
B@2a80d889
Les deux sont différents de mes données envoyées ... Je suis sûr qu'il me manque quelque chose de vraiment simple ...
De l'aide?!
response
dans ma réponse, alors malheureusement non, il n'y a pas d'autre moyen. Le meilleur moyen serait que vous receviez les octets sous forme de données brutes (sous forme binaire) au lieu d'une chaîne, ou peut-être même sous forme de chaîne Base64, ce qui ne vous obligerait qu'à la reconvertir en tant que valeur de base 256 (binaire).Cela génère une "chaîne cool" vers la console.
C'est sacrément facile.
la source
byte[]
qu'il reçoit est représenté par unString
; c'est à dire"[97, 98, 99]"
non[97, 98, 99]
. Cela signifie que votre réponse ne s'applique même pas à cette situation.String
àbyte[]
laString
. Je pense que l'exigence de la question estbyte[]
àString
labyte[]
.Ce que j'ai fait:
retour aux clients:
recevoir des clients:
vos données seront transférées dans ce format:
la source
Ce qui
Arrays.toString()
fait est de créer une représentation sous forme de chaîne de chaque octet individuel dans votre byteArray.Veuillez consulter la documentation de l'API Arrays API
Pour reconvertir votre chaîne de réponse dans le tableau d'octets d'origine, vous devez utiliser
split(",")
ou quelque chose et le convertir en une collection, puis convertir chaque élément individuel en un octet pour recréer votre tableau d'octets.la source
Il est simple de convertir un tableau d'octets en chaîne et une chaîne en tableau d'octets en java. nous devons savoir quand utiliser «nouveau» de la bonne manière. Cela peut être fait comme suit:
conversion de tableau d'octets en chaîne:
Conversion de tableau de chaînes en octets:
Pour plus de détails, consultez: http://evverythingatonce.blogspot.in/2014/01/tech-talkbyte-array-and-string.html
la source
Le type de sortie que vous voyez de votre tableau d'octets (
[B@405217f8
) est également une sortie pour un tableau d'octets de longueur nulle (c'est-à-direnew byte[0]
). Il semble que cette chaîne soit une référence au tableau plutôt qu'une description du contenu du tableau comme on pourrait s'y attendre de latoString()
méthode d'une collection régulière .Comme avec les autres répondants, je voudrais vous indiquer les
String
constructeurs qui acceptent unbyte[]
paramètre pour construire une chaîne à partir du contenu d'un tableau d'octets. Vous devriez être capable de lire les octets bruts à partir d'une socketInputStream
si vous souhaitez obtenir des octets à partir d'une connexion TCP.Si vous avez déjà lu ces octets en tant que
String
(en utilisant unInputStreamReader
), la chaîne peut être convertie en octets à l'aide de lagetBytes()
fonction. Assurez-vous de transmettre le jeu de caractères souhaité au constructeur et auxgetBytes()
fonctions String , et cela ne fonctionnera que si les données d'octet peuvent être converties en caractères par leInputStreamReader
.Si vous souhaitez traiter des octets bruts, vous devez vraiment éviter d'utiliser cette couche de lecture de flux.
la source
Ne pouvez-vous pas simplement envoyer les octets sous forme d'octets, ou convertir chaque octet en caractère et l'envoyer sous forme de chaîne? Faire comme vous l'êtes prendra au moins 85 caractères dans la chaîne, alors que vous n'avez que 11 octets à envoyer. Vous pouvez créer une représentation sous forme de chaîne des octets, donc ce serait "[B @ 405217f8", qui peut facilement être converti en un objet
bytes
oubytearray
en Python. A défaut, vous pourriez les représenter comme une série de chiffres hexadécimaux ("5b42403430353231376638") occupant 22 caractères, qui pourraient être facilement décodés côté Python en utilisantbinascii.unhexlify()
.la source
[B@405217f8
est l'ID d'objet Java du tableau, pas le contenu du tableau. L'ID d'objet ne peut certainement pas "être facilement converti en un objet bytes ou bytearray en python". Le mieux que vous puissiez faire en termes de taille est de convertir l'octet [] en une chaîne de base64.[JDK8]
Pour enchaîner:
Au tableau d'octets:
la source
Si vous souhaitez reconvertir la chaîne en un tableau d'octets, vous devrez utiliser
String.getBytes()
(ou une fonction Python équivalente) et cela vous permettra d'imprimer le tableau d'octets d'origine.la source
Utilisez l'API de code ci-dessous pour convertir le bytecode sous forme de chaîne en tableau d'octets.
la source
[JAVA 8]
la source