zoukankan      html  css  js  c++  java
  • 深入解析开源项目之Universal-Image-Loader(二)硬盘---缓存篇

    文件命名:

    FileNameGenerator,HashCodeFileNameGenerator,Md5FileNameGenerator

    package com.nostra13.universalimageloader.cache.disc.naming;
    
    /**
     * Generates names for files at disk cache
     */
    public interface FileNameGenerator {
        /** Generates unique file name for image defined by URI */
        String generate(String imageUri);
    }
    package com.nostra13.universalimageloader.cache.disc.naming;
    
    /**
     * Names image file as image URI {@linkplain String#hashCode() hashcode}
     */
    public class HashCodeFileNameGenerator implements FileNameGenerator {
        @Override
        public String generate(String imageUri) {
            return String.valueOf(imageUri.hashCode());
        }
    }
    package com.nostra13.universalimageloader.cache.disc.naming;
    
    import com.nostra13.universalimageloader.utils.L;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * Names image file as MD5 hash of image URI
     */
    public class Md5FileNameGenerator implements FileNameGenerator {
    
        private static final String HASH_ALGORITHM = "MD5";
        private static final int RADIX = 10 + 26; // 10 digits + 26 letters
    
        @Override
        public String generate(String imageUri) {
            byte[] md5 = getMD5(imageUri.getBytes());
            BigInteger bi = new BigInteger(md5).abs();
            return bi.toString(RADIX);
        }
    
        private byte[] getMD5(byte[] data) {
            byte[] hash = null;
            try {
                MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM);
                digest.update(data);
                hash = digest.digest();
            } catch (NoSuchAlgorithmException e) {
                L.e(e);
            }
            return hash;
        }
    }

    看完内存缓存的分析,再来看看磁盘缓存的逻辑。

    相关的接口和类的关系如下:

    ImageLoader磁盘关系图

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/yaowen/p/6363484.html
Copyright © 2011-2022 走看看