繁体   English   中英

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

[英]Arrays equals return false for same byte arrays

首先,我创建一个签名(byte []签名)。 然后,我将此签名写入文件。 我从该文件中读取签名,并给它另一个变量(字节[] signatureCopy)。 但是当我比较这两个变量时,它返回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。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM