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

原文地址:https://www.cnblogs.com/yaowen/p/6363484.html