DiskLruCache 源码解析 (一)

这篇我们将分析 DiskLruCache 源码 ,来弄清楚它是如何运行的
Github 地址:https://github.com/JakeWharton/DiskLruCache

首先我们打开 项目看一下项目结构

DiskLruCache 源码解析 (一)_第1张图片
项目结构

可以看到目录结构很简单,只有三个类
1、DiskLruCache.java
2、StrictLineReader.java
3、Util.java
下面分别进入看一下,首先看比较简单的,明显 StrictLineReader.java 是个工具类 先看一下它

DiskLruCache 源码解析 (一)_第2张图片
StrictLineReader 方法列表

我们先看一下类的介绍

DiskLruCache 源码解析 (一)_第3张图片
类介绍

大意就是 这个类是一个 缓冲器,以‘行’为主体的数据或是 journal 文件 并且只识别以 \n 或者是 \r\n 为一行的末尾,
如果缓存主体没有以正确的形式结束 这一行将被忽略,并可以调用 hasUnterminatedLine 来检查非法的‘行’

DiskLruCache 源码解析 (一)_第4张图片
成员变量

下面看看类内的属性
1、CR\LF 换行符回车符
2、InputStream 输入流
3、Chartset 字符集
4、byte[] buf 缓冲数组
5、pos ,end 位置指针
上面的说明中 介绍了 buf pos end 的作用
buf 是缓冲器实体,数据会存在这个数组中,只要没有异常发生 pos end 的大小关系 始终为 0<=pos<=end 。
数据索引pos 的数据 为可读数据,如果行没有正确的行结束符\n \r\n
end 将被置为-1 其他情况将设置为 end==pos
如果 inputstream 丢出异常 end 的值 可能是 pos 或者是-1

DiskLruCache 源码解析 (一)_第5张图片
构造函数

指定容量和字符集来创建一个 StrictLineReader 对象

DiskLruCache 源码解析 (一)_第6张图片
DiskLruCache 源码解析 (一)_第7张图片
readline 方法

方法说明: 读下一行,每个 ‘行’都以 换行符 回车符作为标志 返回值中不包含行尾标志。
这个方法是这个类的主要功能 我们一行一行看
首先synchronized 进行线程同步
判断如果缓冲数组为空 抛出异常
如果当前位置 在 末尾,说明没有更多的数据可以读取了,调用 fillbuf()方法

下面一个 for 循环 对行尾标志进行查找
从当前已经读到的位置开始查找下一个行尾标志,如果找到,将这部分内容进行截取 并返回。

接下来,如果没有找到行结束标志的异常情况,这里我没有弄清这80个字符是什么,后面弄清楚在细写这部分。

DiskLruCache 源码解析 (一)_第8张图片
image.png

hasUnterminatedLine 方法 判断是否有不合法的行
fillBuf() 读取新的数据到 buffer 中,只有在 pos==end 或者 end==-1时才被调用

接下来看 util 类

DiskLruCache 源码解析 (一)_第9张图片
util 类

4个方法 其中一个 构造函数

DiskLruCache 源码解析 (一)_第10张图片
readFully

这个方法 读取 reader 中的全部内容

DiskLruCache 源码解析 (一)_第11张图片
deleteContents

这个方法删除 目标目录下的所有文件 如果删除失败 抛出异常

DiskLruCache 源码解析 (一)_第12张图片
closeQuietly

关闭 具有关闭功能的对象 Closeable 可关闭的对象带有close()关闭方法的对象。
下一篇我们看主体功能 DiskLruCache 类以及方法

DiskLruCache 源码解析 (一)_第13张图片
请关注我的公众号

你可能感兴趣的:(DiskLruCache 源码解析 (一))