Java字节数组到字符串到字节数组

我试图理解一个字节[]到字符串,字符串表示的字节[]到字节[]转换…我将我的byte []一个字符串发送,然后我期望我的web服务(写在python)以将数据直接回送到客户端。

当我从我的Java应用程序发送数据…

Arrays.toString(data.toByteArray())

发送字节..

[B@405217f8

发送(这是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<len; i++) {
   bytes[i] = Byte.parseByte(byteValues[i].trim());     
}

String str = new String(bytes);

**编辑**

你在你的问题中得到一个你的问题的提示,你说“无论我似乎尝试,我最终得到一个字节数组,看起来如下… [91,45,…”,因为91是字节值for [,so [91,45,…是字符串“[-45,1,16,…”)的字节数组。

方法Arrays.toString()将返回指定数组的String表示形式;这意味着返回的值将不再是数组。例如 :

byte[] b1 = new byte[] {97, 98, 99};

String s1 = Arrays.toString(b1);
String s2 = new String(b1);

System.out.println(s1);        // -> "[97, 98, 99]"
System.out.println(s2);        // -> "abc";

可以看到,s1保存数组b1的字符串表示,而s2保存b1中包含的字节的字符串表示。

现在,在你的问题,你的服务器返回一个类似于s1的字符串,因此要获得数组表示,你需要相反的构造函数方法。如果s2.getBytes()与新的String(b1)相反,你需要找到与Arrays.toString(b1)相反的,因此我在这个答案的第一个片段中粘贴的代码。

转载注明原文:Java字节数组到字符串到字节数组 - 代码日志