做美食网站的特点,谷歌收录查询,企业网站建设搜集资料,wordpress网盘插件一、概念 用于实现存储设备缓存#xff0c;即磁盘缓存#xff0c;通过将缓存对象写入文件系统从而实现缓存的效果。 二、使用
2.1 添加依赖
最新依赖
implementation com.jakewharton:disklrucache:2.0.2
2.2 配置权限
uses-permission android:name即磁盘缓存通过将缓存对象写入文件系统从而实现缓存的效果。 二、使用
2.1 添加依赖
最新依赖
implementation com.jakewharton:disklrucache:2.0.2
2.2 配置权限
uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE /
uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE /
2.3 创建对象 open()
public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize)directory 存储路径该文件夹里面所有文件参与计算大小。 appVersion应用的版本号一般设为 1 即可。当版本号发生改变时会清空之前所有的缓存文件而这个特性在实际开发中作用并不大很多情况下即使应用的版本号发生了改变缓存文件却仍然是有效的。valueCount表示同一个 key 可以对应多少个缓存文件一般设为 1 即可。maxSize表示缓存的总大小比如 50MB当缓存大小超出这个设定值后DiskLruCache 会清除一些缓存从而保证总大小不大于这个设定值。
缓存的key为String类型且必须匹配正则表达式[a-z0-9_-]{1,64}。 一个key可以对应多个valuevalue类型为字节数组大小在0 ~ Integer.MAX_VALUE之间缓存的目录必须为专用目录因为DiskLruCache可能会删除或覆盖该目录下的文件。添加缓存操作具备原子性但多个进程不应该同时使用同一个缓存目录。
/*** 外置路径storage/emulated/0/Android/data/包名/cache* 内置路径data/data/包名/ceche* param cachePath 如果外置存储获取不到就从内置存储中获取调用 context.externalCacheDir?.path ?: context.cacheDir.path*/
class BitmapDiskCache(private val cachePath: String
) {private val cacheSize (1024 * 1024 * 50).toLong() //50Mprivate val file File(cachePath.plus(BitmapLru)).apply { if (!exists()) mkdirs() }private val instance DiskLruCache.open(file, 1, 1, cacheSize)suspend fun put(key: String, value: Bitmap) withContext(Dispatchers.IO) {instance.use { cache -//获取编辑器cache.edit(key).run {//获取输出流0表示第一个缓存文件不能超过创建时设置的valueCountnewOutputStream(0).use { outputStream -//写入Bitmapvalue.compress(Bitmap.CompressFormat.PNG, 100, outputStream)}//提交commit()}}}suspend fun get(key: String): Bitmap? withContext(Dispatchers.IO) {instance.use { cache -//获取快照cache.get(key).run {//获取输入流0表示第一个缓存文件不能超过创建时设置的valueCountgetInputStream(0).use { inputStream -//读取BitmapBitmapFactory.decodeStream(inputStream)}}}}suspend fun remove(key: String) withContext(Dispatchers.IO) {instance.use { cache -cache.remove(key)}}}