Bytes not equal after wrap in string
本问题已经有最佳答案,请猛点这里访问。
我使用字符串来传输字节数组,但发现了一些奇怪的地方。有人能解释为什么会这样吗?
1 2 3 4 5 6 7 8 9 10 | 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
字符串不是字节数组,字节数组不是字符串。不能用一个直接传送另一个。
字符串在逻辑上是字符数组。如果要在字符和字节之间转换,则需要字符编码,它指定从字符到字节的映射,反之亦然。
您在这里遇到的问题是,您正在使用JVM的默认字符编码,并尝试转换该编码中不支持的字节值。
如果必须将字节数组存储在字符串中,则应首先执行base64编码之类的操作。