文件命名:
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; }}
看完内存缓存的分析,再来看看磁盘缓存的逻辑。
相关的接口和类的关系如下: