Java字节数组到字符串到字节数组
我试图理解一个byte []
到字符串,一个byte []
的字符串表示形式到byte []
转换…我将我的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 scriptString[] 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, ...”
的字节数组也是如此。
该方法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()
是的反义词new String(b1)
,则需要找到的反义词Arrays.toString(b1)
,因此我在此答案的第一段代码中粘贴的代码。
以上是 Java字节数组到字符串到字节数组 的全部内容, 来源链接: utcz.com/qa/410178.html