我要求“检查内容文件的完整性”。这些文件将写入CD / DVD,可能会多次复制。这个想法是识别正确复制的副本(在从Nero中删除之后等)。
对此更新,但快速搜索表明Arrays.hashCode(byte[])
符合需求。我们可以在磁盘上包含一个文件,其中包含每个感兴趣资源的调用结果,然后将其与检查时从磁盘读取的byte[]
的{{1}}进行比较。
我是否正确理解了该方法,这是检查文件内容的有效方法吗?
如果没有,建议您搜索关键字或策略/方法/类别。
基于Brendan答案的工作代码。它解决了VoidStar发现的问题(需要将整个File
保留在内存中以获取哈希值。)
byte[]
答案 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