看glide源码的时候,对glide关于磁盘缓存文件名、内存缓存文件和资源请求路径的对应关系很好奇,于是来了看看glide是怎么把这个问题处理好的兴趣。glide中定义了抽象接口Key来做各种唯一标识,所有Key的实现类下面有说明,实现方式类似,而Key和磁盘缓存文件名的关系通过SafeKeyGenerator中的getSafeKey方法来关联,本文分析分为三部分,相关类介绍、MessageDigest用法和源码分析。
一、相关类介绍
1. SafeKeyGenerator:唯一字符串标识生成类,通过key来生成,此类是建立文件名和key之间的关系
2. interface Key,实现类:
* ResourceCacheKey:资源缓存key
* DataCacheKey:原始资源数据缓存key
* EngineKey:引擎加载key,用于唯一标识一次加载
* GlideUrl:glide中唯一标识url的包装
* ObjectKey:通用类型key
* MediaStoreSignature:媒体存储签名
* EmptySignature:空key,用于判断其他key是否为空
* Options:内存缓存key的设置 的唯一标识
* UniqueKey:空的key
二、MessageDigest的用法(前置知识)
//字符串生成md5值
public static String stringMD5(String input) {
try {
// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
MessageDigest messageDigest =M