当前位置: 首页 > 面试题库 >

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

贝滨海
2023-03-14
问题内容

我试图理解一个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 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),因此我在此答案的第一段代码中粘贴的代码。



 类似资料:
  • 问题内容: 如何从某个包含数字,字母等的字符串中获取字节数组?如果您熟悉Java,那么我正在寻找与getBytes()方法相同的功能。 我尝试了如下代码段: 但没有成功,因此将不胜感激。 PS:为什么我完全需要这个!好吧,我需要通过fputs()将字节数组发送到用Java编写的服务器… 问题答案: @Sparr是正确的,但是我想您期望像C#中那样的字节数组。它与Sparr的解决方案相同,但是您希望

  • 我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议

  • 问题内容: 我将数据存储在字节数组中。如何将这些数据转换为十六进制字符串? 我的字节数组示例: 问题答案: 使用: 或使用 注意: 在format语句中,表示在必要时最多填充2个前导s。这很重要,因为它将被格式化为而不是 或与配合使用: 这是Python 3.6.1中上述方法的基准: 结果: 使用的方法的确提供了其他格式选项,例如用空格,逗号,大写字母/等分隔数字,但是会影响性能。

  • 问题内容: 我得到一个整数: 当我使用方法: 给出: 但我想要一个字节数组: 我该怎么做? 问题答案: 使用Java NIO的ByteBuffer非常简单: 输出:

  • 为什么数组不相等?我希望返回原始的字节数组。