먼저 서명 (byte [] 서명)을 만듭니다. 그런 다음이 서명을 파일에 씁니다. 이 파일에서 서명을 읽고 다른 변수 (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를 사용한다. 새로운 String (서명)은 (바이트 배열이 기본 charset을 사용하여 인코딩 된 문자를 나타내지 않기 때문에) 의미가없는 손실 연산이며 println()은 EOL 문자를 추가합니다. –
고맙습니다. OutputStream이 작동했습니다. Writer가 작동하지 않는 이유는 무엇입니까? 설명 할 수 있니? – cezaalp
나는 이미있다. 내 의견을 다시 읽으십시오. –