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)
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)