为了账号安全,请及时绑定邮箱和手机立即绑定

Java Byte Array to String to Byte Array

Java Byte Array to String to Byte Array

隔江千里 2019-07-26 11:13:20
Java Byte Array to String to Byte Array我正在尝试理解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这两个都与我发送的数据不同......我确信我错过了一些非常简单的东西....有什么帮助?!
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

你不能只是获取返回的字符串并从中构造一个字符串...它不再是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, ...”字符串的字节数组。


该方法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),因此我粘贴在这个答案的第一个片段中的代码


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 939 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信