根据哈希确认文件内容

时间:2011-10-15 05:46:29

标签: java file hash checksum

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

对此更新,但快速搜索表明Arrays.hashCode(byte[])符合需求。我们可以在磁盘上包含一个文件,其中包含每个感兴趣资源的调用结果,然后将其与检查时从磁盘读取的byte[]的{​​{1}}进行比较。

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

如果没有,建议您搜索关键字或策略/方法/类别。


基于Brendan答案的工作代码。它解决了VoidStar发现的问题(需要将整个File保留在内存中以获取哈希值。)

byte[]

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

是的,只要您加载整个文件并将其传入,它就会按预期执行。 然而它将消耗尽可能多的RAM,因为文件很大,这对于此任务来说不是必需的。如果您在将文件从存储中流式传输时将文件散列为较小的块,则可以避免浪费内存。例如,您可以将每个块的哈希值组合在一起以创建最终哈希值,或者找到期望数据流式传输的哈希实现。

答案 2 :(得分:1)

以下是一个例子:

您需要创建校验和文件
http://www.jguru.com/faq/view.jsp?EID=216274