换行字符串后的字节数不相等



我使用字符串进行字节数组传输,但发现它有点奇怪。有人能解释一下为什么会发生这种情况吗?

 byte[] bytes1 = new byte[]{-104, 73, 61, -15, -92, 109, 62, -99, 50, 82, 26, 87, 38, 110, -12, 49, -104, 73, 61, -15, -92, 109, 62, -99};
 byte[] bytes2 = new String(bytes1).getBytes();
 //for now bytes2 is equal to: {63, 73, 61, -15, -92, 109, 62, -99, 50, 82, 26, 87, 38, 110, -12, 49, 63, 73, 61, -15, -92, 109, 62, -99}
 System.out.println(Arrays.equals(bytes1, bytes2));//false
 for(int i = 0; i < bytes2.length; i++){
    if(bytes2[i] == 63) {
        bytes2[i] = -104;
    }
 }
 System.out.println(Arrays.equals(bytes1, bytes2));//true

psbytes1-这是三个des密钥字节数组。每次都不同,但只有在bytes1包含-104值的情况下才会失败。非常感谢。

字符串不是字节数组,字节数组不是字符串。不能使用其中一个直接传输另一个。

字符串在逻辑上是字符数组。如果要在字符和字节之间进行转换,则需要一个字符编码,它指定从字符到字节的映射,反之亦然。

这里的问题是,您使用JVM的默认字符编码,并试图转换该编码中不支持的字节值。

如果必须将字节数组存储在字符串中,则应该先对其进行base64编码。

最新更新