Java 计算10 MB块中文件的MD5哈希?

Java 计算10 MB块中文件的MD5哈希?,java,hash,io,md5,Java,Hash,Io,Md5,如果你有100 MB的文件,我想得到10个哈希为每10 MB段。 如果是101MB,我应该得到11段MD5散列 我想使用自定义摘要流,它将返回所有哈希作为列表 public class ChunkedDigestStream extends DigestInputStream { private final long chunkSize; private final List<String> chunkDigests = new ArrayList<>(

如果你有100 MB的文件,我想得到10个哈希为每10 MB段。 如果是101MB,我应该得到11段MD5散列

我想使用自定义摘要流,它将返回所有哈希作为列表

public class ChunkedDigestStream extends DigestInputStream {

    private final long chunkSize;
    private final List<String> chunkDigests = new ArrayList<>();
    private int count = 0;

    public ChunkedDigestStream(InputStream stream, MessageDigest digest, int chunkSize) {
        super(stream, digest);
        this.chunkSize = chunkSize;

    }

    @Override
    public int read(byte[] b, int off, int len) throws IOException {

       // What could be implementation here ?
}
    public List<String> getChunkDigests() {
        return chunkDigests;
    }
}
公共类ChunkedDigestStream扩展DigestInputStream{
私有最终长块大小;
private final List chunkDigests=new ArrayList();
私有整数计数=0;
公共ChunkedDigestStream(InputStream、MessageDigest摘要、int chunkSize){
超级(流,摘要);
this.chunkSize=chunkSize;
}
@凌驾
公共整数读取(字节[]b,整数关闭,整数长度)引发IOException{
//在这里可以实现什么?
}
公共列表getChunkDigests(){
返回块摘要;
}
}
公共类ChunkedDigestStream扩展DigestInputStream{
私有最终长块大小;
private final List chunkDigests=new ArrayList();
私有整数计数=0;
private volatile boolean isClosed=false;
公共ChunkedDigestStream(InputStream、MessageDigest摘要、int chunkSize){
超级(流,摘要);
this.chunkSize=chunkSize;
}
@凌驾
公共整数读取(字节[]b,整数关闭,整数长度)引发IOException{
int结果=in.读取(b,关,len);
如果(结果!=-1){
for(int i=off;i>>4];
hexChars[j*2+1]=hexArray[v&0x0F];
}
返回新字符串(hexChars);
}
}
测试客户端

公共静态void main(字符串[]args)抛出NoSuchAlgorithmException、IOException{

String test = "1234567891";

InputStream inputStream = new ByteArrayInputStream(test.getBytes());
try (ChunkedDigestStream shaStream = new ChunkedDigestStream(inputStream, MessageDigest.getInstance("MD5"),
        5)) {

    // Create byte array to read data in chunks
    byte[] byteArray = new byte[10];

    // Read file data and update in message digest
    while (shaStream.read(byteArray) != -1) {
        System.out.println(new String(byteArray));
    }

    shaStream.close();
    System.out.println(shaStream.getChunkDigests());
}
}

String test = "1234567891";

InputStream inputStream = new ByteArrayInputStream(test.getBytes());
try (ChunkedDigestStream shaStream = new ChunkedDigestStream(inputStream, MessageDigest.getInstance("MD5"),
        5)) {

    // Create byte array to read data in chunks
    byte[] byteArray = new byte[10];

    // Read file data and update in message digest
    while (shaStream.read(byteArray) != -1) {
        System.out.println(new String(byteArray));
    }

    shaStream.close();
    System.out.println(shaStream.getChunkDigests());
}