zoukankan      html  css  js  c++  java
  • 比较两个文件是否相同(计算MD5效验码比较方式)

    MD5文件效验码是一个判断文件是否是相同文件的途径,通过比较两个文件的Md5效验码是否相同来精确判断两个文件是否相同

    Java代码实现

    public class MD5Check {
    
        /**
         * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
         */
        protected char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        protected  MessageDigest messagedigest = null;
        
        {
            try {
                messagedigest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
    
        public String getFileMD5String(File file) throws IOException {
            InputStream fis;
            fis = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int numRead = 0;
            while ((numRead = fis.read(buffer)) > 0) {
                messagedigest.update(buffer, 0, numRead);
            }
            fis.close();
            return bufferToHex(messagedigest.digest());
        }
        
        public String getFileMD5String(InputStream in) throws IOException {
            byte[] buffer = new byte[1024];
            int numRead = 0;
            while ((numRead = in.read(buffer)) > 0) {
                messagedigest.update(buffer, 0, numRead);
            }
            in.close();
            return bufferToHex(messagedigest.digest());
        }
    
        private String bufferToHex(byte bytes[]) {
            return bufferToHex(bytes, 0, bytes.length);
        }
    
        private String bufferToHex(byte bytes[], int m, int n) {
            StringBuffer stringbuffer = new StringBuffer(2 * n);
            int k = m + n;
            for (int l = m; l < k; l++) {
                appendHexPair(bytes[l], stringbuffer);
            }
            return stringbuffer.toString();
        }
    
        private void appendHexPair(byte bt, StringBuffer stringbuffer) {
            char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换
            // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
            char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
            stringbuffer.append(c0);
            stringbuffer.append(c1);
        }
    
    }
  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/liyangguang/p/3682152.html
Copyright © 2011-2022 走看看