根据哈希确认文件内容

And*_*son 5 java hash checksum file

我要求"检查文件内容的完整性" .这些文件将写入CD/DVD,可能会多次复制.这个想法是识别正确复制的副本(在从Nero中删除之后).

对此我很陌生,但快速搜索表明这Arrays.hashCode(byte[])符合需求.我们可以包括包含号召每一个感兴趣的资源的结果,磁盘上的文件,然后将其比作byte[]File从磁盘检查时,为已读.

我是否正确理解了该方法,这是检查文件内容的有效方法吗?

如果没有,将赞赏关于搜索关键字或策略/方法/类的建议.


工作代码基于Brendan的答案.它解决了VoidStar识别的问题(需要保留整个byte[]内存以获取哈希值).

import java.io.File;
import java.io.FileInputStream;
import java.util.zip.CRC32;

class TestHash {

    public static void main(String[] args) throws Exception {
        File f = new File("TestHash.java");
        FileInputStream fis = new FileInputStream(f);
        CRC32 crcMaker = new CRC32();
        byte[] buffer = new byte[65536];
        int bytesRead;
        while((bytesRead = fis.read(buffer)) != -1) {
            crcMaker.update(buffer, 0, bytesRead);
        }
        long crc = crcMaker.getValue(); // This is your error checking code
        System.out.println("CRC code is " + crc);
    }
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

Arrays.hashCode()设计得非常快(用在哈希表中).我强烈建议不要将它用于此目的.

你想要的是某种错误检查代码,如CRC.

Java碰巧有一个用于计算这些的类:CRC32:

InputStream in = ...;
CRC32 crcMaker = new CRC32();
byte[] buffer = new byte[someSize];
int bytesRead;
while((bytesRead = in.read(buffer)) != -1) {
    crcMaker.update(buffer, 0, bytesRead);
}
long crc = crcMaker.getValue(); // This is your error checking code
Run Code Online (Sandbox Code Playgroud)