首先我創建簽名(字節[]簽名)假。然後我將這個簽名寫入文件。我從這個文件讀取簽名並給它另一個變量(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) {
}
}
請勿使用Writer寫入二進制數據。使用OutputStream。新字符串(簽名)是一種有損操作,因爲字節數組不代表使用默認字符集編碼的字符,並且println()會添加EOL字符。 –
謝謝。 OutputStream工作。爲什麼Writer不工作,OutputStream的作品。你可以解釋嗎? – cezaalp
我已經擁有。重新閱讀我的評論。 –