diskLruCache4cj库
介绍
DiskLruCache 是一个管理硬盘内容的存储管理工具,它采用了最近最少使用(LRU)算法,以对硬盘中存储的文件进行管理,在存储空间短缺的情况下,会优先将最近最少使用的文件删除,以扩展可用的硬盘空间。
前置条件:NA
场景:
- 支持数据写入硬盘缓存中
- 支持从硬盘缓存中读取数据
- 支持从硬盘缓存中删除指定key值的缓存文件
- 支持同步缓存文件的操作记录至journal和关闭缓存
约束: NA
性能: NA
可靠性: NA
1.1 支持数据写入硬盘缓存中
支持数据写入硬盘缓存中,使用指定的缓存目录
1.1.1 主要接口
public class DiskLruCache {
/**
* 打开缓存目录,如果不存在则创建缓存
*
* 参数 directory - 缓存目录路径
* 参数 appVersion - 缓存版本
* 参数 valueCount - 算每个缓存项的值
* 参数 maxSize - 存储的最大字节数
* 异常 DiskLruCacheException 如果maxSize和valueCount为小于等于零时抛出
* 返回值 DiskLruCache - 返回缓存的对象
*/
public static func open(directory: Path, appVersion: Int64, valueCount: Int64, maxSize: Int64): DiskLruCache
/**
* 关闭缓存并删除其所有存储的值
* 异常 DiskLruCacheException 当directory缓存目录不存在时,抛出异常
*/
public func delete(): Unit
/**
* 关闭缓存
*/
public func close(): Unit
/**
* 返回此缓存存储其数据的目录路径
*
* 返回值 Directory
*/
public func getDirectory(): Path
/**
* 返回此缓存应用于存储的最大字节数
*
* 返回值 Int64
*/
public func getMaxSize(): Int64
/**
* 更改缓存可以存储的最大字节数
*
* 参数 maxSize - 最大字节数
* 异常 DiskLruCacheException 当 maxSize 小于等于零时,抛出异常
*/
public func setMaxSize(maxSize: Int64): Unit
/**
* 返回当前用于存储中的值的字节数
*
* 返回值 Int64
*/
public func getSize(): Int64
/**
* 如果此缓存已关闭,则返回true
*
* 返回值 Bool
*/
public func isClosed(): Bool
/**
* 对文件系统执行缓冲操作
* 异常 DiskLruCacheException 当调用close()方法后使用时,抛出异常
*/
public func flush(): Unit
**
* 返回缓存的目录的编辑器
*
* 参数 key - 缓存文件的标记
* 返回值 Option<Editor>
* 异常 DiskLruCacheException 当调用close()方法后使用时,当key不符合正则匹配("[a-z0-9_-]{1,64}"),抛出异常
*/
public func edit(key: String): Option<Editor>
}
public class Editor {
/**
* 中止此编辑
*/
public func abort(): Unit
/**
* 返回一个未缓冲的输入流
*
* 参数 index - 缓存标记值
* 返回值 Option<InputStream>
*/
public func newInputStream(index: Int64): Option<InputStream>
/**
* 以字符串形式返回最后提交的值
*
* 参数 index - 缓存标记值
* 返回值 String
*/
public func getString(index: Int64): String
/**
* 返回一个新的未缓冲的输出流
*
* 参数 index - 缓存标记值
* 返回值 File
*/
public func newOutputStream(index: Int64): File
/**
* 设置缓存的数据
*
* 参数 index - 缓存的文件名
* 参数 value - 缓存的数据
*/
public func set(index: Int64, value: String): Unit
/**
* 提交此编辑的数据
*/
public func commit(): Unit
/**
* 进行终止
*/
public func abortUnlessCommitted(): Unit
}
public class DiskLruCacheException <: Exception {
/**
* 异常初始化
*/
public init()
/**
* 异常初始化
*
* 参数 messages - 异常信息
*/
public init(messages: String)
/**
* 获取异常信息
*
* 返回值 String - 异常信息
*/
public func getMessage(): String
/**
* 异常信息转换为 String 类型
*
* 返回值 String
*/
public override func toString(): String
}
1.1.2 示例
from disklrucache import disklrucache.*
from std import fs.*
from std import math.*
from std import os.posix.*
from std import unittest.*
from std import unittest.testmacro.*
main() {
let lrucache = LruCacheOpen1Test()
lrucache.open1Test()
return 0
}
@Test
public class LruCacheOpen1Test {
@TestCase
public func open1Test(): Unit {
var path: String = getcwd()
var TmpDir = Path(path + "/DiskLruCacheTest")
let appVersion = 100
Directory.create(TmpDir)
var cache = DiskLruCache.open(TmpDir, appVersion, 2, Int64(Int32.Max))
let key = "k1"
let src = cache.edit(key).getOrThrow()
src.set(0, "ABC")
src.set(1, "DE")
let pc = src.getString(0).isEmpty()
src.commit()
println("success")
@Assert(true, pc)
}
}
执行结果如下:
success
1.2 支持从硬盘缓存中读取数据
支持从硬盘缓存中读取数据
1.2.1 主要接口
public class DiskLruCache {
/**
* 获取缓存的对象
*
* 参数 key - 缓存文件的标记值
* 返回值 Option<Snapshot> - 读取文件的对象
*/
public func get(key: String): Option<Snapshot>
}
public class Snapshot {
/**
* 获取文件编辑的对象
*
* 返回值 Option<Editor> - 读取文件编辑的对象
*/
public func edit(): Option<Editor>
/**
* 返回缓存的文件流
*
* 参数 index - 缓存文件的设置的标记值
* 返回值 File - 缓存的文件对象
* 异常 DiskLruCacheException 当调用close()方法后使用时,抛出异常
*/
public func getInputStream(index: Int64): File
/**
* 获取对应缓存的数据
*
* 参数 index - 缓存文件的设置的标记值
* 返回值 String - 存储的值
* 异常 DiskLruCacheException 当调用close()方法后使用时,抛出异常
*/
public func getString(index: Int64): String
/**
* 获取缓存数据的长度
*
* 参数 index - 缓存文件的设置的标记值
* 返回值 Int64 - 缓存数据的长度
* 异常 IndexOutOfBoundsException 当index不是存储的下标时,抛出异常
*/
public func getLength(index: Int64): Int64
/**
* 关闭缓存文件流
*/
public func close(): Unit
}
1.2.2 示例
from disklrucache import disklrucache.*
from std import fs.*
from std import math.*
from std import os.posix.*
from std import unittest.*
from std import unittest.testmacro.*
main() {
let lrucache = LruCacheOpen1Test()
lrucache.open1Test()
return 0
}
@Test
public class LruCacheOpen1Test {
@TestCase
public func open1Test(): Unit {
var path: String = getcwd()
var TmpDir = Path(path + "/DiskLruCacheTest37")
let appVersion = 100
Directory.create(TmpDir)
var cache = DiskLruCache.open(TmpDir, appVersion, 2, Int64(Int32.Max))
let key = "k1"
let src = cache.edit(key).getOrThrow()
src.set(0, "OP")
src.set(1, "LKll")
src.commit()
let sc = cache.get("k1").getOrThrow().getString(0)
println("success")
@Assert("OP", sc)
}
}
执行结果如下:
success
1.3 支持从硬盘缓存中删除指定key值的缓存文件
缓存中删除指定key值的缓存文件
1.3.1 主要接口
public class DiskLruCache {
/**
* 删除指定key值的缓存
*
* 参数 key - 缓存文件的标记值
* 返回值 Bool - 是否删除成功
* 异常 DiskLruCacheException 当调用close()方法后使用时,抛出异常
*/
public func remove(key: String): Bool
}
1.3.2 示例
from disklrucache import disklrucache.*
from std import fs.*
from std import math.*
from std import os.posix.*
from std import unittest.*
from std import unittest.testmacro.*
main() {
let lrucache = LruCacheOpen1Test()
lrucache.open1Test()
return 0
}
@Test
public class LruCacheOpen1Test {
@TestCase
public func open1Test(): Unit {
var path: String = getcwd()
var TmpDir = Path(path + "/DiskLruCacheTest")
let appVersion = 100
Directory.create(TmpDir)
var cache = DiskLruCache.open(TmpDir, appVersion, 2, Int64(Int32.Max))
let key = "k1"
let src = cache.edit(key).getOrThrow()
src.set(0, "ABC")
src.set(1, "DE")
src.getString(0).isEmpty()
src.commit()
let cq = cache.remove("k1")
println("success")
@Assert(true, cq)
}
}
执行结果如下:
success
1.4 支持同步缓存文件的操作记录至journal和关闭缓存
支持关闭缓存
1.4.1 主要接口
public class DiskLruCache {
/**
* 关闭此缓存,存储的值将保留在文件系统中
*/
public func close(): Unit
}
1.4.2 示例
from disklrucache import disklrucache.*
from std import fs.*
from std import math.*
from std import os.posix.*
from std import unittest.*
from std import unittest.testmacro.*
main() {
let lrucache = LruCacheOpen1Test()
lrucache.open1Test()
return 0
}
@Test
public class LruCacheOpen1Test {
@TestCase
public func open1Test(): Unit {
var path: String = getcwd()
var TmpDir = Path(path + "/DiskLruCacheTest")
let appVersion = 100
Directory.create(TmpDir)
var cache = DiskLruCache.open(TmpDir, appVersion, 2, Int64(Int32.Max))
cache.close()
cache.isClosed()
println("success")
@Assert(true, cache.isClosed())
}
}
执行结果如下:
success