DigestInputStream --还是与下载有关的
当一个任务下载完成之后,肯定得考虑文件是否下载完整。所以就会涉及到文件校验,常用的当然还是通过MD5摘要来校验。
习惯性的想到的就是,从服务器端拿到资源文件的MD5码,然后不断的读取本地文件并调用MessageDigest.update(byte) 方法来生成摘要,然后与服务器端的MD5码比较。
但是如果文件过大的话,仅生成本地文件的MD5码就会浪费大量的时间。
其实本身java中就提供了一个DigestInputStream 的类,就可以生成本地文件的MD5码(当然,也可以使用DigestOutputStream来生成 。
这个流在在读取资源文件的过程中就update 了Digest(当然 DigestOutputStream 即write方法调用的过程中更新了摘要)
MessageDigest digest = MessageDigest.getInstance("MD5");FileInputStream in = new FileInputStream(new File(filePath));DigestInputStream stream = new DigestInputStream(in, digest);byte[] bs = new byte[1024];while((stream.read(bs))!=-1){//TODO} // 循环结束后,则digest已经更新完毕了。System.out.println((stream.getMessageDigest())==digest);//输出true 他还是原来的他.