为什么不能使用FileInputStream来填充MessageDigest对象?

顽强的水獭

为什么必须使用DigestInputStream而不是FileInputStream来获取文件的摘要?

我编写了一个从FileInputStream读取int并将其转换为字节并将其传递给MessageDigest对象的update方法的程序。但是我怀疑它不能正常工作,因为它会立即计算非常大文件的摘要。为什么不起作用?

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class DigestDemo {

    public static byte[] getSha1(String file) {
        FileInputStream fis = null;
        MessageDigest md = null;

        try {
            fis = new FileInputStream(file);
        } catch(FileNotFoundException exc) {
            System.out.println(exc);
        }

        try {
            md = MessageDigest.getInstance("SHA-1");
        } catch (NoSuchAlgorithmException exc) {
            System.out.println(exc);
        }

        byte b = 0;
        do {

            try {
                b = (byte) fis.read();
            } catch (IOException e) {
                System.out.println(e);
            }

            if (b != -1)
                md.update(b);

        } while(b != -1);

        return md.digest();

    }

    public static void writeBytes(byte[] a) {
        for (byte b : a) {
            System.out.printf("%x", b);
        }
    }

    public static void main(String[] args) {

        String file = "C:\\Users\\Mike\\Desktop\\test.txt";
        byte[] digest = getSha1(file);
        writeBytes(digest);

    }

}
用户名

您需要将的类型更改bint,,并且需要MessageDigest.doFinal()在文件末尾进行调用,但这效率极低。尝试从字节数组读取和更新

这段代码中有太多的try-catching。将其减少到循环外的try和二catches,

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails:为什么不能使用由ajax创建的对象来触发javascript?

来自分类Dev

为什么不能使用函数的typedef来定义函数?

来自分类Dev

为什么不能使用v-on速记来绑定“ on”?

来自分类Dev

为什么不能使用滑块设置AxWindowsMediaPlayer对象的音量?

来自分类Dev

为什么不能使用滑块设置AxWindowsMediaPlayer对象的音量?

来自分类Dev

为什么我不能使用包含mysqli对象的属性?

来自分类Dev

为什么我不能使用嵌套的 IntList 创建对象?

来自分类Dev

通过右值数据成员来延长临时对象的生存期,可以使用聚合,但不能使用构造函数,为什么呢?

来自分类Dev

为什么PoolManager不能使用HTTPSConnectionPool?

来自分类Dev

为什么不能使用这样的struct?

来自分类Dev

为什么ckan不能使用中文?

来自分类Dev

为什么我不能使用asyncTask

来自分类Dev

为什么不能使用下拉列表?

来自分类Dev

rpm为什么不能使用xterm?

来自分类Dev

为什么不能使用Override注释?

来自分类Dev

为什么不能使用HTTP代理?

来自分类Dev

为什么ckan不能使用中文?

来自分类Dev

为什么不能使用布局约束来调整画布的大小?

来自分类Dev

为什么我不能使用“ fgets”来读取Struct元素的字符串?

来自分类Dev

在Oracle PL / SQL中,为什么我不能使用<< >>来命名块

来自分类Dev

为什么我不能使用通用类型来实现非通用签名

来自分类Dev

为什么不能使用'as'运算符来解析不可为空的值类型?

来自分类Dev

为什么不能使用HashSet <string>来实现IEnumerable <string>接口属性?

来自分类Dev

为什么不能使用存储指令.db,.dw来声明要存储在SRAM中的变量?

来自分类Dev

为什么不能使用同名技巧来链接实例化?

来自分类Dev

为什么不能使用大括号{}来分配结构变量?

来自分类Dev

为什么我不能使用std :: unique_ptr来避免循环依赖?

来自分类Dev

为什么我不能使用Sass变量来定义CSS变量的值

来自分类Dev

为什么我不能使用方法setState()来数组元素

Related 相关文章

  1. 1

    Rails:为什么不能使用由ajax创建的对象来触发javascript?

  2. 2

    为什么不能使用函数的typedef来定义函数?

  3. 3

    为什么不能使用v-on速记来绑定“ on”?

  4. 4

    为什么不能使用滑块设置AxWindowsMediaPlayer对象的音量?

  5. 5

    为什么不能使用滑块设置AxWindowsMediaPlayer对象的音量?

  6. 6

    为什么我不能使用包含mysqli对象的属性?

  7. 7

    为什么我不能使用嵌套的 IntList 创建对象?

  8. 8

    通过右值数据成员来延长临时对象的生存期,可以使用聚合,但不能使用构造函数,为什么呢?

  9. 9

    为什么PoolManager不能使用HTTPSConnectionPool?

  10. 10

    为什么不能使用这样的struct?

  11. 11

    为什么ckan不能使用中文?

  12. 12

    为什么我不能使用asyncTask

  13. 13

    为什么不能使用下拉列表?

  14. 14

    rpm为什么不能使用xterm?

  15. 15

    为什么不能使用Override注释?

  16. 16

    为什么不能使用HTTP代理?

  17. 17

    为什么ckan不能使用中文?

  18. 18

    为什么不能使用布局约束来调整画布的大小?

  19. 19

    为什么我不能使用“ fgets”来读取Struct元素的字符串?

  20. 20

    在Oracle PL / SQL中,为什么我不能使用<< >>来命名块

  21. 21

    为什么我不能使用通用类型来实现非通用签名

  22. 22

    为什么不能使用'as'运算符来解析不可为空的值类型?

  23. 23

    为什么不能使用HashSet <string>来实现IEnumerable <string>接口属性?

  24. 24

    为什么不能使用存储指令.db,.dw来声明要存储在SRAM中的变量?

  25. 25

    为什么不能使用同名技巧来链接实例化?

  26. 26

    为什么不能使用大括号{}来分配结构变量?

  27. 27

    为什么我不能使用std :: unique_ptr来避免循环依赖?

  28. 28

    为什么我不能使用Sass变量来定义CSS变量的值

  29. 29

    为什么我不能使用方法setState()来数组元素

热门标签

归档