OpenHarmony打造的一款磁盘缓存库—DiskLruCache

167 阅读3分钟

简介

本项目基于开源库 DiskLruCache 进行OpenHarmony的自研版本:

  • 支持应用内存空间存储文件。
  • 支持存储ArrayBuffer数据类型和File文件路径。
  • 支持存储容量的动态设置。

下载安装

ohpm install @ohos/disklrucache

使用说明

步骤1:

在index.ets页面中导入

import { DiskLruCache } from '@ohos/disklrucache'

步骤2:

在build中声明对象。

testDiskLruCache: DiskLruCache = undefined

在使用之前初始化对象,首先在Ability或者Application使用GlobalContext.getContext.setObject("context", this.context)注册context。

import Ability from '@ohos.application.Ability'
export default class MainAbility extends Ability {
    onCreate(want, launchParam) {
        GlobalContext.getContext.setObject("context", this.context)
    }
 }

然后在页面中创建对象。

// 使用应用缓存路径创建文件夹名称为diskLruCache,设置磁盘缓存大小为3M(可选参数,默认设置缓存大小为300M,最大设置不能超过300M)
this.testDiskLruCache = DiskLruCache.create(GlobalContext.getContext.getObject("context"), 3 * 1024 * 1024)

DD一下:鸿蒙开发各类文档,可关注公Z号<程序猿百晓生>霍取。

1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

步骤3:

在build中添加按钮,将图片文件存入磁盘缓存。

同步设置字符串缓存数据。

let data: string = "Hello World Simple Example.";
this.testDiskLruCache.set('test', data);

同步读取字符串磁盘缓存数据。

import fs from '@ohos.file.fs';

let path = '/data/storage/el2/base/com.example.disklrucache/entry/files/testFile.txt';
let fd = fs.openSync(path, 0o2);
let length = fs.statSync(path).size;
let data = new ArrayBuffer(length);
fs.readSync(fd, data);
this.testDiskLruCache.set('testFile', data);

同步设置文件磁盘缓存数据。

import fs from '@ohos.file.fs';

let path = '/data/storage/el2/base/com.example.disklrucache/entry/files/testFile.txt';
let fd = fs.openSync(path, 0o2);
let length = fs.statSync(path).size;
let data = new ArrayBuffer(length);
fs.readSync(fd, data);
this.testDiskLruCache.set('testFile', data);

同步读取文件磁盘缓存数据。

import fs from '@ohos.file.fs';

let path = '/data/storage/el2/base/com.example.disklrucache/entry/files/testFile.txt';
let fd = fs.openSync(path, 0o2);
let length = fs.statSync(path).size;
let data = new ArrayBuffer(length);
fs.readSync(fd, data);
this.testDiskLruCache.set('testFile', data);

异步设置字符串磁盘缓存数据和一部获取字符串磁盘缓存数据。

let data:ArrayBuffer = this.testDiskLruCache.get('testFile');

异步设置文件磁盘缓存数据和异步获取文件磁盘缓存数据。

let value: string = "Hello World Simple Example.";
this.testDiskLruCache.setAsync('test', value).then(() => {
    this.testDiskLruCache.getAsync('test').then((data) => {
        console.log(String.fromCharCode.aplly(null, new Uint8Array(data)));
    })
}).catch((err) => {
    console.log('err =' + err);
})

步骤4:

更多细节设置请参考index.ets示例文件。

接口说明

DiskLruCache接口

方法名入参接口描述
create(context, maxSize?: number): DiskLruCachecontext, maxSize?: number构造器创建对象,设置磁盘缓存路径,磁盘缓存大小
setMaxSize(max: number) :voidmax: number重置磁盘缓存大小
set(key: string, content: ArrayBufferstring):voidkey: string, content: ArrayBufferstring磁盘缓存存入数据
setAsync(key: string, content: ArrayBufferstring):Promisekey: string, content: ArrayBufferstring异步磁盘缓存存入数据
get(key: string): ArrayBufferkey: string磁盘缓存获取ArrayBuffer
getAsync(key: string): Promisekey: string异步磁盘缓存获取ArrayBuffer
getFileToPath(key: string): stringkey: string磁盘缓存获取文件路径
getFileToPathAsync(key: string): Promisekey: string异步磁盘缓存获取文件路径
getPath(): string获取缓存路径
deleteCacheDataByKey(key: string): DiskCacheEntrykey: string删除当前缓存key对应的DiskCacheEntry
cleanCacheData()清除所有磁盘缓存数据

约束与限制

在下述版本验证通过:

  • DevEco Studio: 4.0(4.0.3.512),SDK: API10(4.0.10.9)
  • DevEco Studio: 3.1 Beta2(3.1.0.400), SDK: API9 Release(3.2.11.9)

目录结构

/disklrucache/src/
- main/ets/components
    - cache               # 缓存相关内容
       - CustomMap.ets       # 自定义Map封装
       - DiskCacheEntry.ets  # 磁盘缓存entry
       - DiskLruCache.ets    # 磁盘LRU缓存策略
       - FileReader.ets      # 文件读取相关
       - FileUtils.ets       # 文件工具类       
/entry/src/
- main/ets     
    - pages               # 测试page页面列表
       - index.ets           # 测试磁盘缓存页面