I’m trying to understand a byte[] to string, string representation of byte[] to byte[] conversion… I convert my byte[] to a string to send, I then expect my web service (written in python) to echo the data straight back to the client.
When I send the data from my Java application…
Arrays.toString(data.toByteArray())
Bytes to send..
[B@405217f8
Send (This is the result of Arrays.toString() which should be a string representation of my byte data, this data will be sent across the wire):
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
On the python side, the python server returns a string to the caller (which I can see is the same as the string I sent to the server
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
The server should return this data to the client, where it can be verified.
The response my client receives (as a string) looks like
[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]
I can’t seem to figure out how to get the received string back into a
byte[]
Whatever I seem to try I end up getting a byte array which looks as follows…
[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]
or I can get a byte representation which is as follows:
B@2a80d889
Both of these are different from my sent data… I’m sure Im missing something truly simple….
Any help?!
You can’t just take the returned string and construct a string from it… it’s not a
byte[]data type anymore, it’s already a string; you need to parse it. For example :** EDIT **
You get an hint of your problem in your question, where you say “
Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...“, because91is the byte value for[, so[91, 45, ...is the byte array of the string “[-45, 1, 16, ...” string.The method
Arrays.toString()will return aStringrepresentation of the specified array; meaning that the returned value will not be a array anymore. For example :As you can see,
s1holds the string representation of the arrayb1, whiles2holds the string representation of the bytes contained inb1.Now, in your problem, your server returns a string similar to
s1, therefore to get the array representation back, you need the opposite constructor method. Ifs2.getBytes()is the opposite ofnew String(b1), you need to find the opposite ofArrays.toString(b1), thus the code I pasted in the first snippet of this answer.