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