Java Byte Array para String para Byte Array

I'estou tentando entender um byte[] a string, representação de string de byte[] a byte[] conversão... Eu converto meu byte[] para uma string para enviar, eu então espero que meu serviço web (escrito em python) ecoe os dados diretamente de volta para o cliente.

Quando eu enviar os dados da minha aplicação Java...

Arrays.toString(data.toByteArray())

Bytes para enviar...

[B@405217f8

Enviar (Este é o resultado de Arrays.toString() que deve ser uma representação em cadeia dos meus dados de bytes, estes dados serão enviados através do fio):

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

No lado python, o servidor python devolve uma string ao chamador (que eu posso ver é a mesma que a string que eu enviei para o servidor

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

O servidor deve retornar esses dados para o cliente, onde podem ser verificados.

A resposta que meu cliente recebe (como um fio) se parece com

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

Eu posso'parece que não consigo descobrir como fazer com que o fio recebido volte para um byte[]

O que quer que eu pareça tentar, acabo por ter uma matriz de bytes que parece ser a seguinte...

[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 posso obter uma representação de bytes, que é a seguinte:

B@2a80d889

Ambos são diferentes dos meus dados enviados... I'tenho a certeza que me está a faltar algo verdadeiramente simples....

Alguma ajuda?!

Solução

Você pode'não basta pegar a string retornada e construir uma string a partir dela... it'não é mais um byte[] tipo de dado, it'já é uma string; você precisa analisá-la. Por exemplo :


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
Comentários (4)

O que o Arrays.toString() faz é criar uma representação em string de cada byte individual em seu byteArray.

Consulte a documentação da API Arrays API

Para converter sua string de resposta para a matriz de bytes original, você tem que utilizar split(",") ou algo assim e convertê-la em uma coleção e então converter cada item individual ali dentro em um byte para recriar sua matriz de bytes.

Comentários (0)

Você não pode simplesmente enviar os bytes como bytes, ou converter cada byte em um personagem e enviar como uma string? Fazendo isso como você é, você irá ocupar um mínimo de 85 caracteres na string, quando você tem apenas 11 bytes para enviar. Você poderia criar uma representação de string dos bytes, então it'd be "[B@405217f8", que pode ser facilmente convertido para um objeto bytes ou bytearray em Python. Caso contrário, você poderia representá-los como uma série de dígitos hexadecimais ("5b42403430353231376638") assumindo 22 caracteres, que poderiam ser facilmente decodificados no lado Python utilizando binascii.unhexlify().

Comentários (2)