java - 对于相同的字节数组,数组等于返回 false

标签 java string file byte

首先,我创建一个签名(byte[] 签名)。然后我将此签名写入文件。我从这个文件中读取签名并给它另一个变量(byte []签名复制)。但是当我比较这两个变量时,它返回 false。我该如何解决?

但是当我打印屏幕时,它看起来是一样的。

System.out.println (new String (signature));
System.out.println (new String (signatureCopy));

代码:

    byte[] signature = this.signature(data);        
    FileUtil.writeRegistryFileSigned(path, signature);
    byte[] signatureCopy = FileUtil.readSignatureInRegistryFile(path);
    System.out.println(Arrays.equals(signature, signatureCopy)); //FALSE

函数;

public static byte[] readSignatureInRegistryFile(String filePath){
    byte[] data = null;
    try {
        data = Files.readAllBytes(Paths.get(filePath));
    } catch (IOException e) {
        e.printStackTrace();
    }
    return data;        
}


public static void writeRegistryFileSigned(String filePath, byte[] signature) {
    File fileRegistry = new File(filePath);
    try {
        fileRegistry.createNewFile();
    } catch (IOException e1) {

    }
    try (FileWriter fw = new FileWriter(fileRegistry, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter out = new PrintWriter(bw)) {            
        out.println(new String(signature));

    } catch (IOException e) {
    }

}

最佳答案

您正在使用 println 进行编写,它将向字符串添加 CR-LF 或 LF。

readAllBytes 将真正读取所有字节,包括 CR-LF 或 LF。

因此,尽管打印的字符串看起来相同,但数组不同。 (不过,您应该注意到额外的换行符。)

此外:如果将字节转换为字符串,某些编码会生效,这可能会也可能不会产生您想要的结果。如果您的签名应该是字节数组,请不要将其转换为字符串进行打印,而是将字节值打印为十六进制的数值。

关于java - 对于相同的字节数组,数组等于返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993224/

相关文章:

java - Android ExoPlayer 已弃用,无法流式传输视频

java - cas 自定义注销

java - 父类(super class)上 protected 数组的值意外更改

c# 字符串性能 - 比较字符串文本或字符串长度哪个更快

python - 当文件被删除时,文件句柄会发生什么?

C: 无法将文件中的行存储到数组中

java - 实体保存在数据库中,但永远不会被获取

c - (字符串)文字的范围

C++:将 WCHAR[] 的一部分复制到 wstringstream 中的最佳方法?

javascript - 如何从 JavaScript 文件中检查正在使用哪个 HTML?