A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© che201311 中级黑马   /  2013-12-8 19:50  /  1207 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. import java.security.*;
  3. import java.util.*;

  4. class ReturnDigest extends Thread
  5. {
  6.     private File input;
  7.     public ReturnDigest(File input)
  8.     {
  9.         this.input =input;
  10.     }

  11.     public void run()
  12.     {
  13.         try
  14.         {
  15.             FileInputStream in = new FileInputStream(input);
  16.             MessageDigest sha = MessageDigest.getInstance ("SHA");
  17.             DigestInputStream din = new DigestInputStream(in,sha);
  18.             int b;
  19.             while((b = din.read())!=-1);
  20.             din.close();
  21.             byte[] digest = sha.digest();

  22.             digest = sha.digest();
  23.             //System.out.println( digest );
  24.         }
  25.         catch (IOException ex)
  26.         {
  27.             System.err.println(ex);
  28.         }
  29.         catch (NoSuchAlgorithmException ex)
  30.         {
  31.             System.err.println(ex);
  32.         }
  33.     }
  34.      
  35.     public byte[] getDigest()
  36.     {
  37.         return digest;
  38.     }
  39. }

  40. public class ReturnDigestUserInterface
  41. {
  42.     public static void main(String[] args)
  43.     {
  44.         for (int i=0 ; i<args.length ; i++ )
  45.         {
  46.             File f = new File(args[i]);
  47.             ReturnDigest dr = new Return Digest(f);
  48.             dr.start();

  49.             //显示结果
  50.             StringBuffer result = new StringBuffer (f.toString());
  51.             result.append(": ");
  52.             byte[] digest = dr.getDigest();
  53.             for( int j =0 ;j <digest.length; j++)
  54.             {
  55.                 result.append (digest[j]+" ");
  56.             }
  57.             System.out.println(result);
  58.         }
  59.     }
  60. }
复制代码
为什么dr.start()开始的计算可能会在main()方法运行到dr.getDigest()调用之前结束?


评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

1 个回复

倒序浏览
好乱的代码 看了半天
因为你的名为 digest 的字节数组变量 是在try代码块里定义的 所以他只是一个局部变量 只能在run方法中调用
  public byte[] getDigest()

    {

        return digest;

    }

可是你又搞出了这么一行代码 因为访问不到digest 所以程序就运行异常了

解决办法 把digest定义成全局变量 比如放在第7行的上面

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马