【发布时间】:2011-10-15 05:46:29
【问题描述】:
我需要“检查文件的内容的完整性”。这些文件将被写入 CD/DVD,可能会被复制多次。这个想法是识别正确复制的副本(在它们从 Nero 等中删除之后)。
我对此相当陌生,但快速搜索表明Arrays.hashCode(byte[]) 将满足需要。我们可以在磁盘上包含一个文件,该文件包含对每个感兴趣的资源的调用结果,然后将其与检查时从磁盘读取的File 的byte[] 进行比较。
我是否正确理解该方法,这是检查文件内容的有效方法吗?
如果没有,我们将不胜感激有关搜索关键字或策略/方法/类的建议。
基于 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);
}
}
【问题讨论】: