• 深入解析开源项目之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磁盘关系图

  • 相关阅读:
    UML的相关基础知识
    easyui的datagrid、treegrid增加表头菜单,用于显示或隐藏列
    easyui datagrid load的时候,提交的时候多了name为数字的参数
    Easyui Dialog 设置初始位置
    投票系统的代码总结
    部门组织机构树的使用
    TCP连接客户端的方法
    播放M3U8的js代码
    JAVA的split的用法
    BOLB转word文件,和word文件转换BOLB
  • 原文地址:https://www.cnblogs.com/yaowen/p/6363484.html
Copyright © 2020-2023  润新知