Я пытаюсь написать код для генерации того же значения контрольной суммы, которое было сгенерировано командой UNIX cksum.
Когда я запускаю свой код и команду для одного и того же файла, я получаю разные значения.
Что не так с моим кодом?
package cksum;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.zip.Adler32;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
public class Cksum1 {
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
//MessageDigest md = MessageDigest.getInstance("MD5");
String File = "C:\\Users\\admin\\Desktop\\logback XMLs\\STG_logback_Debug_All.xml";
//String File = args[0];
doChecksum32(File);
}
private static void doChecksum32(String fileName) {
try {
CheckedInputStream cis = null;
long fileSize = 0;
try {
// Computer CRC32 checksum
cis = new CheckedInputStream(
new FileInputStream(fileName), new CRC32());
fileSize = new File(fileName).length();
} catch (FileNotFoundException e) {
System.err.println("File not found.");
System.exit(1);
}
byte[] buf = new byte[128];
while (cis.read(buf) >= 0) {
}
long checksum = cis.getChecksum().getValue();
System.out.println(checksum + " " + fileSize + " " + fileName);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
Вывод Java:
пробег:
1478491164 8335 C: \ Users \ admin \ Desktop \ logback
XMLs \ STG_logback_Debug_All.xml
СТРОИТЬ УСПЕШНО (общее время: 0 секунд)
Выход Unix:
[tibroot @ myserver ~] $ cksum ./STG_logback_Debug_All.xml
1715323814
8335 ./STG_logback_Debug_All.xml