java - 换行后字节不相等

标签 java arrays

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

 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 - 这是三重 key 字节数组。每次都不同,但只有在 bytes1 的情况下才会失败包含-104值(value)观。非常感谢。

最佳答案

字符串不是字节数组,字节数组也不是字符串。您不能使用其中之一直接转移另一个。

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

您遇到的问题是您正在使用 JVM 的默认字符编码,并尝试转换该编码不支持的字节值。

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

关于java - 换行后字节不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33473934/

相关文章:

c - 第一个字节和第一个字节元素地址之间的差异

java - 如何停止后台服务?

java - 使用适用于 OpenShift 的 Jboss Tools 插件进行部署会生成错误 invalid target release : 1. 8

php - Yii2 将表单字段数组保存到单个数据库字段

ios - 按第二个单词对 nsarray 进行排序。 (按 "firstname surname"类字符串数组中的姓氏)

javascript - 构建 JSON 数组并检索其元素的更好方法

java - 如何使用 thymeleaf 作为模板引擎生成 pdf 报告?

java - 这返回了一个引用还是一个新对象?

java - 如何将值从sql数据库设置到java文本框?

javascript - Javascript 中的双维数组返回未定义的数组