以下代码应该使用DigestInputStreamJava中的类计算文本文件中字符串的哈希值.
import java.io.*;
import java.security.*;
public class ReturnDigest extends Thread {
private File input;
private byte[] digest;
public ReturnDigest(File input) {
this.input = input;
}
public void run() {
try {
FileInputStream in = new FileInputStream(input);
MessageDigest sha = MessageDigest.getInstance("SHA");
DigestInputStream din = new DigestInputStream(in, sha);
int b;
while ((b = din.read()) != -1) ;
din.close();
digest = sha.digest();
}
catch (IOException ex) {
System.err.println(ex);
}
catch (NoSuchAlgorithmException ex) {
System.err.println(ex);
}
}
public byte[] getDigest() {
return digest;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么while声明后有分号?它是否正确?当我删除它时,我收到错误.我还没有听说过一段时间之后可以加分号.你能否在这段代码中澄清一下这个案子.
这是一个空循环,读取的值没有做任何事情。事实上,可以b完全摆脱变量:
while (din.read() != -1) {
}
Run Code Online (Sandbox Code Playgroud)
我还用一个空块替换了分号(空语句),因为这对这里发生的事情更加明确。
这是从输入流中读取的一种非常非典型的方式(通常你想对读取的数据做一些事情),因为摘要输入流有一个副作用:如果你从中读取它也会计算任何东西的哈希已读。如果您只想要散列,则需要读取,但不需要对读取的值执行任何操作。
| 归档时间: |
|
| 查看次数: |
3768 次 |
| 最近记录: |