简介

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

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

下载安装

ohpm install @ohos/disklrucache
  • 1.

使用说明

步骤1:

在index.ets页面中导入

import { DiskLruCache } from '@ohos/disklrucache'
  • 1.
步骤2:

在build中声明对象。

testDiskLruCache: DiskLruCache = undefined
  • 1.

在使用之前初始化对象,首先在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)
    }
 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

然后在页面中创建对象。

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

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

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

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

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

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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

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

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

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);
})
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
步骤4:

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

接口说明

DiskLruCache接口

方法名

入参

接口描述

create(context, maxSize?: number): DiskLruCache

context, maxSize?: number

构造器创建对象,设置磁盘缓存路径,磁盘缓存大小

setMaxSize(max: number) :void

max: number

重置磁盘缓存大小

set(key: string, content: ArrayBuffer

string):void

key: string, content: ArrayBuffer

setAsync(key: string, content: ArrayBuffer

string):Promise

key: string, content: ArrayBuffer

get(key: string): ArrayBuffer

key: string

磁盘缓存获取ArrayBuffer

getAsync(key: string): Promise

key: string

异步磁盘缓存获取ArrayBuffer

getFileToPath(key: string): string

key: string

磁盘缓存获取文件路径

getFileToPathAsync(key: string): Promise

key: string

异步磁盘缓存获取文件路径

getPath(): string

获取缓存路径

deleteCacheDataByKey(key: string): DiskCacheEntry

key: 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           # 测试磁盘缓存页面
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

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

《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

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

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_嵌入式硬件_03

基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_鸿蒙开发_04

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_鸿蒙开发_05

OpenHarmony 开发环境搭建

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_移动开发_06

《OpenHarmony源码解析》

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_移动开发_07

OpenHarmony 设备开发学习手册

OpenHarmony打造的一款磁盘缓存库—DiskLruCache_移动开发_08

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