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

9 浏览
0 Comments

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

我正在尝试理解byte[]到string的转换,以及string表示的byte[]到byte[]的转换...我将我的byte[]转换为一个string进行发送,然后期望我的Web服务(用Python编写)将数据直接回传给客户端。\n当我从我的Java应用程序发送数据时...\n

Arrays.toString(data.toByteArray())

\n要发送的字节...\n

[B@405217f8

\n发送(这是Arrays.toString()的结果,应该是我字节数据的string表示,这些数据将通过网络发送):\n

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

\n在Python端,Python服务器将一个string返回给调用者(我可以看到它与我发送到服务器的string相同):\n

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

\n服务器应该将这些数据返回给客户端,以便进行验证。\n客户端收到的响应(作为string)看起来像这样:\n

[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]

\n我无法弄清楚如何将接收到的string转换回byte[]\n无论我尝试什么,最终得到的byte数组都是这样的...\n

[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]

\n或者我可以得到以下的byte表示:\n

B@2a80d889

\n这两者都与我发送的数据不同...我确定我错过了一些非常简单的东西...\n有人能帮忙吗?!

0
0 Comments

问题的出现原因是在Java中将byte数组转换为字符串后,又将字符串转换回byte数组时出现了错误。具体的解决方法是使用Base64编码和解码来确保数据的正确转换。

在给客户端返回结果时,首先将加密后的数据result转换为字符串str,这里使用了Base64的encodeBase64String方法将byte数组转换为字符串。

而在接收客户端发送的数据时,先将字符串str使用Base64的decodeBase64方法解码为byte数组bytes。

根据给出的数据格式,可以看到数据确实是经过Base64编码的字符串,因此我们可以使用Base64进行解码。

以下是整理后的文章:

在Java中,有时需要将byte数组转换为字符串,然后再将字符串转换回byte数组。然而,在这个过程中可能会出现问题。下面是一个示例,展示了这个问题的具体原因以及解决方法。

在给客户端返回结果时,我们首先将加密后的数据result转换为字符串str,具体代码如下:

byte[] result = ****encrypted data****;
String str = Base64.encodeBase64String(result);
return str;

上述代码中使用了Base64的encodeBase64String方法,将byte数组转换为字符串。接下来,我们将从客户端接收到的字符串str转换回byte数组,具体代码如下:

byte[] bytes = Base64.decodeBase64(str);

根据给出的数据格式,我们可以发现数据是经过Base64编码的字符串。因此,为了解码这个字符串,我们需要使用Base64的decodeBase64方法。

通过使用Base64编码和解码,我们可以确保数据在byte数组和字符串之间的正确转换。这样,我们就可以避免在转换过程中出现错误的问题。

以上就是关于Java中将byte数组转换为字符串,然后再将字符串转换回byte数组的问题的出现原因以及解决方法的说明。通过使用Base64编码和解码,我们可以确保数据的正确转换。

0
0 Comments

Java中的字节数组(byte array)和字符串(string)之间的转换是一个常见的需求。有时候我们需要将字节数组转换为字符串进行处理,然后再将其转换回字节数组。上述代码就是一个典型的示例,展示了如何进行这种转换。

代码中,我们首先创建了一个字符串对象"cool string"。然后,使用getBytes()方法将字符串转换为字节数组byteArray。接着,我们使用String的构造函数将字节数组转换回字符串对象reconstitutedString。最后,我们通过打印reconstitutedString,验证转换是否成功。

这段代码非常简单易懂,逻辑清晰。但是,在的问题中,有一些人对此提出了质疑,并给出了其他解决方案。

其中一个人提到,该解决方案并不适用于问题的实际情况。问题描述中,字节数组表示为一个字符串,而不是一个数组。也就是说,字节数组"[97, 98, 99]"被表示为字符串"[97, 98, 99]",而不是实际的字节数组[97, 98, 99]。因此,该解决方案并不适用于这种情况。

另外一个人提到,问题要求是将字节数组转换为字符串,然后再转换回字节数组。而上述代码展示的是字符串到字节数组再到字符串的转换。虽然这个解决方案是正确的,但是与问题要求相反。

还有一些人认为,上述代码的示例更加直观,无论是从字符串到字节数组,还是从字节数组到字符串,都可以找到对应的方法。而且,这种示例能够提供所有必要的信息。

,问题的原因是需要在Java中进行字节数组和字符串之间的相互转换。解决方法可以通过使用getBytes()方法将字符串转换为字节数组,再使用String的构造函数将字节数组转换回字符串。然而,需要注意问题描述中的特殊情况,即字节数组被表示为字符串而不是实际的数组。对于这种情况,需要使用其他方法进行处理。此外,还有其他解决方案可以实现字节数组和字符串之间的转换。最终,根据具体的需求和情况选择最适合的解决方案。

0
0 Comments

问题:Java字节数组转换为字符串再转换为字节数组的原因和解决方法

在Java中,将字节数组转换为字符串再转换回字节数组可能会出现问题。直接使用返回的字符串构造字符串是不正确的,因为它已经不是一个字节数组类型,而是一个字符串类型,需要进行解析。解决方法是使用parseByte()方法将字符串解析为字节。

代码示例:

String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]";      // Python脚本的响应
String[] byteValues = response.substring(1, response.length() - 1).split(",");
byte[] bytes = new byte[byteValues.length];
for (int i=0, len=bytes.length; i

问题的提示在于问题描述中的一句话:“无论我尝试什么,我最终得到的字节数组看起来都是这样的... [91, 45, ...”,因为91是字符“[”的字节值,所以[91, 45, ...是表示字符串“[-45, 1, 16, ...”的字节数组。方法Arrays.toString()将返回指定数组的字符串表示形式,意味着返回的值将不再是一个数组。解决方法是使用相反的构造方法。

代码示例:

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中包含的字节的字符串表示形式。

如果你接收到的数据确实是需要像上面示例中的response变量的值那样进行解析的可读字符串,那么很遗憾,没有其他方法可以解决。最好的方法是将数据作为原始数据(二进制)而不是字符串接收,或者甚至作为Base64字符串接收,这只需要将其转换回基于256进制(二进制)的值。

此外,对于将字节数组转换为字符串的任何情况,应指定字符集。字节数组是UTF-8还是其他字符集需要明确,否则可能会出现错误。另外,Java使用Big-Endian编码,而微软系统使用Little-Endian编码。当处理表示数字的字节数组时,源系统和目标系统的字节顺序(endianess)非常重要。

0