在字符串中换行后字节不相等[重复]

Posted

技术标签:

【中文标题】在字符串中换行后字节不相等[重复]【英文标题】:Bytes not equal after wrap in string [duplicate] 【发布时间】:2016-02-02 02:51:11 【问题描述】:

我使用字符串进行字节数组传输,但发现它有些奇怪。谁能解释一下,为什么会这样?

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

【问题讨论】:

请说出您希望这段代码输出什么,以及它输出什么。 “一些奇怪的东西”不是一个特定的错误。 我在 'System.out.println' 行中添加 cmets 我得到错误错误检查这里ideone.com/zpPHNg 认为它取决于平台 【参考方案1】:

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

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

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

如果你必须在字符串中存储一个字节数组,你应该先做一些类似base64编码的事情。

【讨论】:

这项工作 byte[] bytes2 = Base64.getDecoder().decode(new String(Base64.getEncoder().encode(bytes1)));

以上是关于在字符串中换行后字节不相等[重复]的主要内容,如果未能解决你的问题,请参考以下文章

请问在sql中字符串中换行怎么表示?

java中换行字符怎么用?

java中换行字符怎么用?

如何在这种类型的字符串中换行?

如何替换特殊字符然后在oracle中换行

避免在textarea中换行[重复]