Android LruCache和DiskLruCache简单使用

老生常谈 LruCache与DiskLruCache (附带Demo)

一、简介(粘贴一波)用的是kotlin,大家将就着看,都一样的。

1、LruCache简介
Lru算法Lru算法:最近最少使用算法;算法的核心关键类是LinkedHashMap。基本算法:将key-value键值对按照访问顺序进行排列放置,当存入的数据超过最大内存分配时,移除最久访问的数据

LruCache 该类可以在Android API里直接调用:
val lruCache = LruCache<String, friends>(maxMemory / 16)
参数是LruCache能用的最大的内存。
2、DiskLruCache简介
将需要持久保存的数据保存到SD卡中
DiskLruCache类是JakeWharton大神写的,所以没有在Android SDK中,如果想用就要自己下载这个类,添加到自己的项目里面。找不到的同学,https://download.csdn.net/download/yy1713/10427916,或者直接到git上搜索下载

二、使用(大概写下使用,最后有Demo的下载)

LruCache的使用很简单,得到LruCache的对象后,就put()、get()就可以了
lruCache!!.put(key, value)
lruCache!!.get(key)

DiskLruCache的使用:
1、获取diskLruCache对象
//使用open获得DiskLruCache对象,直接new不出来
//参数:1、文件的保存地址(文件夹File)2、App版本号3、缓存条目的值 2、3都可以设置为1 4、文件保存SD卡最大的大小
diskCache = DiskLruCache.open(cacheFile, 1, 1, maxDiskSpace)

2、将数据写入文件
//插入时,要获取DiskCache的Editor
//参数key:文件名
edit = diskCache!!.edit(key)
//Editor用来获取输出流outputStream,进行写文件
val outputStream = edit!!.newOutputStream(0)
//Gson将对象转换为json串保存
//val json = g.toJson(value)
outputStream.write(value.toString().toByteArray())
//别忘了把 Editor.commit()
edit!!.commit()
outputStream.flush()
outputStream.close()

3、从缓存文件中获取数据
‘//获取SnapShot对象 参数key: 文件名 和写文件的key相同时才能获取你想获取的值
val snapShot = diskCache!!.get(key)
val inputStream = snapShot.getInputStream(0)
var num: Int = 0
var byteArray = ByteArray(1024)
var stringBuffer = StringBuilder()
while (num != -1) {
num = inputStream.read(byteArray)
if (num != -1) {
stringBuffer.append(String(byteArray, 0, num))
}
}
//val fromJson: T = g.fromJson(stringBuffer.toString()
//, friends::class.java)
inputStream.close()
return stringBuffer.toString()’

使用DiskLruCache,会自动创建一个journal文件,该文件保存的是你缓存文件的信息。上述的key值就是缓存文件名字,有几个key就会生出几个缓存文件。
在edit.newOutputStream()和snapShot.getInputStream()中的参数是文件的后缀名。
先写这么多。以后用到了新的再修改

Demo下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值