字符串换行后字节不相等
Bytes not equal after wrap in string
我使用字符串进行字节数组传输,但发现了一些奇怪的地方。谁能解释一下,为什么会这样?
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
ps bytes1
- 这是三重 des 密钥字节数组。每次都不同,但只有在 bytes1
包含 -104
值的情况下才会失败。非常感谢。
字符串不是字节数组,字节数组不是字符串。您不能使用一个直接传输另一个。
字符串在逻辑上是 char 数组。如果要在chars和bytes之间进行转换,需要一个字符编码,指定chars到bytes的映射,反之亦然。
您在这里遇到的问题是您正在使用 JVM 的默认字符编码,并试图转换该编码不支持的字节值。
如果您必须将字节数组存储在字符串中,您应该先对它进行 base64 编码之类的操作。
我使用字符串进行字节数组传输,但发现了一些奇怪的地方。谁能解释一下,为什么会这样?
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
ps bytes1
- 这是三重 des 密钥字节数组。每次都不同,但只有在 bytes1
包含 -104
值的情况下才会失败。非常感谢。
字符串不是字节数组,字节数组不是字符串。您不能使用一个直接传输另一个。
字符串在逻辑上是 char 数组。如果要在chars和bytes之间进行转换,需要一个字符编码,指定chars到bytes的映射,反之亦然。
您在这里遇到的问题是您正在使用 JVM 的默认字符编码,并试图转换该编码不支持的字节值。
如果您必须将字节数组存储在字符串中,您应该先对它进行 base64 编码之类的操作。