我试图理解一个字节[]到字符串,字节[]到字节[]转换的字符串表示…我将我的字节[]转换为要发送的字符串,然后我期待我的网络服务(用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服务器返回一个字符串给调用者(我可以看到和我发送给服务器的字符串一样)
服务器应将此数据返回给客户端,以便对其进行验证。
我的客户收到的响应(作为字符串)看起来像
我似乎无法弄清楚如何将接收到的字符串恢复为字节 []
无论我似乎尝试什么,我最终都会得到一个字节数组,如下所示......
[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[]数据类型,它已经是一个字符串;你需要解析它。例如 :
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);
编辑
你在你的问题中得到了你的问题的提示,你说“ Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...”,因为91是 的字节值[,所以[91, 45, ...是字符串“ [-45, 1, 16, ...”字符串的字节数组。
Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...
91
[
[91, 45, ...
[-45, 1, 16, ...
该方法Arrays.toString()将返回String指定数组的表示;这意味着返回的值将不再是一个数组。例如 :
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
b1
s2
现在,在您的问题中,您的服务器返回一个类似于 的字符串s1,因此要获取数组表示形式,您需要相反的构造函数方法。如果s2.getBytes()是 的反面new String(b1),您需要找到 的反面Arrays.toString(b1),因此我粘贴在此答案的第一个片段中的代码。
s2.getBytes()
new String(b1)
Arrays.toString(b1)