DiskCache

作者: 傀儡世界 | 来源:发表于2017-03-01 23:03 被阅读319次

    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<String, Entry> lruEntries
    中,后面get(String key)获取缓存内容时,会先从lruEntries中得到图片文件名返回文件。
    LRU 的实现跟上面内存缓存类似,lruEntries
    为new LinkedHashMap<String, Entry>(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

          本文链接:https://www.haomeiwen.com/subject/iucpwttx.html