较轻量级的数据存储(1)

本文介绍了OHOS平台中轻量级数据存储机制,包括如何使用Preferences进行内存缓存、数据持久化以及其操作接口,同时提到了数据大小限制和文件管理的最佳实践。
摘要由CSDN通过智能技术生成

概念

轻量级数据存储适用于对Key-Value结构的数据进行存取和持久化操作。

运作机制

应用获取某个轻量级存储对象后,该存储对象中的数据将会被缓存在内存中,以便应用获得更快的数据存取速度。应用也可以将缓存的数据再次写回文本文件中进行持久化存储,由于文件读写将产生不可避免的系统资源开销,建议应用减少对持久化文件的读写频率。

c917ce06100e808854ee59eb47b63c8e.png

 

约束与限制

  • 因Preferences实例会加载到内存中,建议存储的数据不超过一万条,并及时清理不再使用的实例,以便减少非内存开销。
  • 数据中的key为string类型,要求非空且字符长度不超过80个。
  • 当数据中的value为string类型时,允许为空,字符长度不超过8192个。
  • 当value值为字符串型Set集合类型时,要求集合元素非空且字符长度不超过8192个。

获取文件对应的Preferences单实例,用于数据操作。 

Context context = getContext(); // 数据文件存储路径:/data/data/{PackageName}/{AbilityName}/preferences。
// Context context = getApplicationContext(); // 数据文件存储路径:/data/data/{PackageName}/preferences。
DatabaseHelper databaseHelper = new DatabaseHelper(context); // context入参类型为ohos.app.Context。
String fileName = "test_pref"; // fileName表示文件名,其取值不能为空,也不能包含路径,默认存储目录可以通过context.getPreferencesDir()获取。
Preferences preferences = databaseHelper.getPreferences(fileName);//获取文件对应的Preferences单实例,用于数据操作。

类名

接口名

描述

DatabaseHelper

DatabaseHelper(Context context)

DatabaseHelper是数据库操作的辅助类,当数据库创建成功后,数据库文件将存储在由上下文指定的目录里。数据库文件存储的路径会因指定不同的上下文存在差异

DatabaseHelper

Preferences getPreferences(String name)

获取文件对应的Preferences单实例,用于数据操作。

 存入数据

preferences.putInt("intKey", 3);
preferences.putString("StringKey", "String value");

存入接口

类名

接口名

描述

Preferences

Preferences putInt(String key, int value)

设置Preferences实例中键对应的int类型的值。

Preferences

Preferences putString(String key, String value)

设置Preferences实例中键对应的String类型的值。

读取数据

int value = preferences.getInt("intKey", 0);

读取接口 

类名

接口名

描述

Preferences

int getInt(String key, int defValue)

获取键对应的int类型的值。

Preferences

float getFloat(String key, float defValue)

获取键对应的float类型的值。

数据持久化

存入数据到实例后,可以通过flush或者flushSync方法将Preferences实例回写到文件中。

preferences.flush();  // 异步方法
bool result = preferences.flushSync();  // 同步方法

轻量级数据持久化接口

类名

接口名

描述

Preferences

void flush()

将Preferences实例异步写入文件。

Preferences

boolean flushSync()

将Preferences实例同步写入文件。

订阅数据变化

订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被回调。

private class PreferencesObserverImpl implements Preferences.PreferencesObserver {
   
    @Override    
    public void onChange(Preferences preferences, String key) {
        if ("intKey".equals(key)) {
           HiLog.info(LABLE, "Change Received:[key=value]");        
        }    
    }
}

// 订阅数据变化
PreferencesObserverImpl observer = new PreferencesObserverImpl();
preferences.registerObserver(observer);
// 修改数据
preferences.putInt("intKey", 3);
// 触发订阅者回调方法执行
preferences.flush();
// 修改数据后,observer的onChange方法会被回调
// 注销订阅
preferences.unRegisterObserver(observer);

订阅数据变化接口

类名

接口名

描述

Preferences

void registerObserver(PreferencesObserver preferencesObserver)

订阅数据变化。

Preferences

void unRegisterObserver(PreferencesObserver preferencesObserver)

注销订阅。

Preferences.PreferencesObserver

void onChange(Preferences preferences, String key)

订阅者的回调方法,数据变化会触发回调该方法。

 移除实例

DatabaseHelper databaseHelper = new DatabaseHelper(context);
String fileName = "name"; // fileName表示文件名,其取值不能为空,也不能包含路径。
databaseHelper.removePreferencesFromCache(fileName);

类名

接口名

描述

DatabaseHelper

boolean deletePreferences(String name)

将Preferences实例从内存中移除,同时删除其在设备上的持久化文件。

DatabaseHelper

void removePreferencesFromCache(String name)

仅将Preferences实例从内存中移除。

移动指定文件

从源路径移动文件到目标路径。移动文件时,应用不允许再操作该文件数据,否则会出现数据一致性问题。

Context targetContext = getContext();
DatabaseHelper databaseHelper = new DatabaseHelper(targetContext);
String srcFile = "srcFile"; // srcFile表示源文件名或者源文件的绝对路径,不能为相对路径,其取值不能为空。当srcFile只传入文件名时,srcContext不能为空。
String targetFile = "targetFile"; // targetFile表示目标文件名,其取值不能为空,也不能包含路径。
Context srcContext = getApplicationContext();
boolean result = databaseHelper.movePreferences(srcContext, srcFile, targetFile);

类名

接口名

描述

DatabaseHelper

boolean movePreferences(Context sourceContext, String sourceName, String targetName)

移动数据持久化文件。

 

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值