DiskCache

DiskCache.java
图片的磁盘缓存接口。

BaseDiskCache.java
一个无大小限制的本地图片缓存,实现了DiskCache主要函数的抽象类。
图片缓存在cacheDir文件夹内,当cacheDir不可用时,则使用备库reserveCacheDir
主要函数:
(1). save(String imageUri, InputStream imageStream, IoUtils.CopyListener listener)
先根据imageUri得到目标文件,将imageStream先写入与目标文件同一文件夹的 .tmp 结尾的临时文件内,若未被listener取消且写入成功则将临时文件重命名为目标文件并返回 true,否则删除临时文件并返回 false。
(2). save(String imageUri, Bitmap bitmap)
先根据imageUri得到目标文件,通过Bitmap.compress(…)函数将bitmap先写入与目标文件同一文件夹的 .tmp 结尾的临时文件内,若写入成功则将临时文件重命名为目标文件并返回 true,否则删除临时文件并返回 false。
(3). File getFile(String imageUri)
根据 imageUri 和 fileNameGenerator得到文件名,返回cacheDir内该文件,若cacheDir不可用,则使用备库reserveCacheDir。

LimitedAgeDiskCache.java
限制了缓存对象最长存活周期的磁盘缓存,继承自BaseDiskCache。
在 get(…) 时判断如果缓存对象存活时间已经超过设置的最长时间,则删除。在 save(…) 时保存当存时间作为对象的创建时间。

UnlimitedDiskCache.java
一个无大小限制的本地图片缓存。与BaseDiskCache无异,只是用了个意思明确的类名。

DiskLruCache.java
限制总字节大小的内存缓存,会在缓存满时优先删除最近最少使用的元素。
通过缓存目录下名为journal的文件记录缓存的所有操作,并在缓存open
时读取journal的文件内容存储到LinkedHashMap lruEntries
中,后面get(String key)获取缓存内容时,会先从lruEntries中得到图片文件名返回文件。
LRU 的实现跟上面内存缓存类似,lruEntries
为new LinkedHashMap(0, 0.75f, true),LinkedHashMap 第三个参数表示是否需要根据访问顺序(accessOrder)排序,true 表示根据accessOrder排序,最近访问的跟最新加入的一样放到最后面,false 表示根据插入顺序排序。这里为 true 且缓存满时trimToSize()函数始终删除第一个元素,即始终删除最近最少访问的文件。
来源于 JakeWharton 的开源项目 DiskLruCache,具体分析请等待 DiskLruCache 源码解析 完成

LruDiskCache.java
限制总字节大小的内存缓存,会在缓存满时优先删除最近最少使用的元素,实现了DiskCache。
内部有个DiskLruCache cache属性,缓存的存、取操作基本都是由该属性代理完成

StrictLineReader.java
通过readLine()函数从InputStream中读取一行,目前仅用于磁盘缓存操作记录文件journal的解析

FileNameGenerator.java
根据 uri 得到文件名的接口

HashCodeFileNameGenerator.java
以 uri 的 hashCode 作为文件名

Md5FileNameGenerator.java
以 uri 的 MD5 值作为文件名

DiskCache.java
图片的磁盘缓存接口

你可能感兴趣的:(DiskCache)