以下是我的两个代码片段:

public class Uploader {

  private static final String SHA_256 = "SHA-256";

  public String getFileSHA2Checksum(InputStream fis) throws IOException {
    try {
      MessageDigest md5Digest = MessageDigest.getInstance(SHA_256);
      return getFileChecksum(md5Digest, fis);
    } catch (NoSuch算法rithmException e) {
      return "KO";
    }
  }

  public void transferTo(InputStream fis) throws IOException {
    FileUtils.copyInputStreamToFile(fis, file2);
  }

我的代码将此类用作:

有没有可能同时利用InputStream打开copyToFilecalculateChecksum

推荐答案

下面是一个使用DigestInputStream的例子,它基于Mark Rotteveel的建议(我很喜欢):

Path input = Paths.get("input_file");
Path output = Paths.get("output_file");
MessageDigest algorithm = MessageDigest.getInstance("SHA-256");
try (InputStream is = Files.newInputStream(input);
     DigestInputStream hashingStream = new DigestInputStream(is, algorithm)) {
    Files.copy(hashingStream, output);
}
byte[] digest = algorithm.digest();
// this line uses Apache Commons Codec to show the hex representation of the byte[]
String hash = Hex.encodeHexString(digest);

Java相关问答推荐

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

Java在模块化jar文件中找不到类,但是javap可以

ittext pdf延迟签名,签名无效

所有 case 一起输入时输出错误,而单独放置时输出正确

生成桥方法以解决具有相同擦除的冲突方法

Jolt变换JSON数组问题

使用多个RemoteDatabase对象的一个线程

try 在Android Studio中的infoWindow中使用EditText(Java)

一对多关系和ID生成

Java组件项目中的JavaFX对话框国际化

Android应用程序为错误的显示类型 Select 尺寸文件

如果List是一个抽象接口,那么Collectors.toList()如何处理流呢?

如何根据配置动态创建N个bean

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

视图被推出线性布局-Android

如何调整JButton的大小以适应图标?

JavaFX,GridPane:在GridPane的列中生成元素将保持所有列的宽度

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

在Spring Boot中使用咖啡因进行缓存

如何使用java区分以下结果