Java バイト配列→文字列→バイト配列

私は、byte[]から文字列、byte[]からbyte[]への変換の文字列表現を理解しようとしています...。私はbyte[]を文字列に変換して送信し、(pythonで書かれた)私のウェブサービスがデータをそのままクライアントにエコーバックすることを期待しています。

私のJavaアプリケーションからデータを送信すると...

Arrays.toString(data.toByteArray())

送信するバイト数...

[B@405217f8

Send (これはArrays.toString()の結果で、私のバイトデータの文字列表現になるはずで、このデータは電線で送信されます)。

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

python側では、pythonサーバーが呼び出し元に文字列を返します(これは私がサーバーに送った文字列と同じであることがわかります)。

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

サーバーはこのデータをクライアントに返し、そこで検証できるようにします。

私のクライアントが受け取る(文字列としての)レスポンスは次のようになります。

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

受信した文字列をどのようにして バイト[]

何をやっても、次のようなバイト配列になってしまいます...。

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

または、以下のようなバイト表現が得られます。

B@2a80d889

どちらも私の送信したデータとは異なります...。私は何か本当に簡単なことを見逃しているのかもしれません。....

何かいい方法はないでしょうか?

ソリューション

これはもうbyte[]データ型ではなく、すでに文字列なので、それを解析する必要があります。例えば:


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
解説 (4)

Arrays.toString()`が行うことは、byteArrayの各バイトの文字列表現を作成することです。

APIドキュメントをご覧ください。 Array APIを参照してください。

応答文字列を元のバイト配列に戻すには、split(",")などを使ってコレクションに変換し、その中の個々の項目をバイトに変換してバイト配列を作り直す必要があります。

解説 (0)

バイトをバイトとして送るか、各バイトを文字に変換して文字列として送ることはできないのでしょうか?あなたのようなやり方では、11バイトしか送れないのに、文字列の中で最低85文字を消費してしまいます。バイトの文字列表現を作れば、 "[B@405217f8" となり、Pythonのbytesまたはbytearrayオブジェクトに簡単に変換できます。それができなければ、22文字からなる一連の16進数("5b42403430353231376638")として表現することができ、Python側ではbinascii.unhexlify()を使って簡単にデコードすることができます。

解説 (2)