当前位置: 首页 > news >正文

天元建设集团有限公司是国企还是央企seo推广官网

天元建设集团有限公司是国企还是央企,seo推广官网,wordpress自动升级失败,南头专业英文网站建设公司API 初始化和实例获取: MMKV.initialize(Context context): 初始化MMKV库。通常在应用程序的入口点调用此方法。 MMKV.defaultMMKV(): 获取默认的MMKV实例。默认实例使用默认的存储路径和加密方式。 MMKV.mmkvWithID(String mmapID): 根据给定的ID获取MMKV实例。…
  • API

  1. 初始化和实例获取:

    • MMKV.initialize(Context context): 初始化MMKV库。通常在应用程序的入口点调用此方法。

    • MMKV.defaultMMKV(): 获取默认的MMKV实例。默认实例使用默认的存储路径和加密方式。

    • MMKV.mmkvWithID(String mmapID): 根据给定的ID获取MMKV实例。可以使用不同的ID创建多个MMKV实例,每个实例都有独立的数据存储。

  2. 存储数据:

    • putBoolean(String key, boolean value): 存储布尔类型的数据。

    • putInt(String key, int value): 存储整数类型的数据。

    • putLong(String key, long value): 存储长整数类型的数据。

    • putFloat(String key, float value): 存储浮点数类型的数据。

    • putDouble(String key, double value): 存储双精度浮点数类型的数据。

    • putString(String key, String value): 存储字符串类型的数据。

    • putBytes(String key, byte[] value): 存储字节数组类型的数据。

    • putParcelable(String key, Parcelable value): 存储实现了Parcelable接口的自定义对象数据。

  3. 读取数据:

    • getBoolean(String key, boolean defaultValue): 读取布尔类型的数据。

    • getInt(String key, int defaultValue): 读取整数类型的数据。

    • getLong(String key, long defaultValue): 读取长整数类型的数据。

    • getFloat(String key, float defaultValue): 读取浮点数类型的数据。

    • getDouble(String key, double defaultValue): 读取双精度浮点数类型的数据。

    • getString(String key, String defaultValue): 读取字符串类型的数据。

    • getBytes(String key): 读取字节数组类型的数据。

    • getParcelable(String key, Class<T> clazz): 读取实现了Parcelable接口的自定义对象数据。

  4. 删除数据:

    • remove(String key): 删除指定键的数据。

    • removeValues(String[] keys): 删除指定键数组的数据。

  5. 清除数据:

    • clear(): 清除所有数据。

  6. 其他操作:

    • contains(String key): 检查是否包含指定键的数据。

    • getAllKeys(): 获取所有键的数组。

    • synchronize(): 同步数据到磁盘。

  7. 高级功能:

    • encode(String key, Object value): 存储任意类型的数据,包括自定义对象。

    • decodeXXX(String key): 读取任意类型的数据,包括自定义对象。

    • setLogLevel(int level): 设置日志级别。

    • setCryptKey(byte[] key): 设置数据加密密钥。

import com.tencent.mmkv.MMKV;public class MMKVExample {public static void main(String[] args) {// 初始化MMKV库MMKV.initialize("/path/to/directory");// 获取默认的MMKV实例MMKV mmkv = MMKV.defaultMMKV();// 存储数据mmkv.putString("name", "John Doe");mmkv.putInt("age", 25);mmkv.putBoolean("isStudent", true);// 读取数据String name = mmkv.decodeString("name");int age = mmkv.decodeInt("age");boolean isStudent = mmkv.decodeBool("isStudent");// 输出读取的数据System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Is Student: " + isStudent);// 删除数据mmkv.remove("age");// 检查数据是否存在boolean containsName = mmkv.containsKey("name");boolean containsAge = mmkv.containsKey("age");System.out.println("Contains name: " + containsName);System.out.println("Contains age: " + containsAge);// 清除所有数据mmkv.clear();}
}
import com.tencent.mmkv.MMKV;public class MMKVExample {public static void main(String[] args) {// 初始化MMKV库MMKV.initialize("/path/to/directory");// 获取默认的MMKV实例MMKV mmkv = MMKV.defaultMMKV();// 检查是否包含指定键的数据boolean containsKey = mmkv.containsKey("name");System.out.println("Contains key: " + containsKey);// 获取所有键的数组String[] allKeys = mmkv.getAllKeys();System.out.println("All keys: ");for (String key : allKeys) {System.out.println(key);}// 同步数据到磁盘mmkv.synchronize();// 存储任意类型的数据,包括自定义对象CustomObject customObject = new CustomObject("John", 25);mmkv.encode("customObject", customObject);// 读取任意类型的数据,包括自定义对象CustomObject decodedObject = mmkv.decodeParcelable("customObject", CustomObject.class);System.out.println("Decoded object: " + decodedObject);// 设置日志级别MMKV.setLogLevel(MMKV.LogLevel.LevelInfo);// 设置数据加密密钥byte[] key = "encryptionKey".getBytes();mmkv.setCryptKey(key);}
// 自定义对象示例static class CustomObject {private String name;private int age;public CustomObject(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "CustomObject{" +"name='" + name + '\'' +", age=" + age +'}';}}
}

存储和读取原理(上文有提及)

  1. 存储原理:

    • MMKV使用mmap(内存映射文件)技术将数据存储在文件中。在初始化MMKV时,它会创建一个特定的文件,并将其映射到进程的地址空间中的一个字节数组。

    • 写入数据时,MMKV会将数据直接写入内存中的字节数组,而不是频繁地写入磁盘文件。这样可以避免磁盘IO的开销,提高了写入性能。

    • MMKV使用了Copy-on-Write(写时复制)技术,即在写入数据时,会先将要修改的数据复制到新的内存区域,然后进行修改。这样可以避免对原始数据的破坏,同时减少了数据复制的开销。

  2. 读取原理:

    • 读取数据时,MMKV会直接从内存中的字节数组中读取数据,而不需要进行磁盘读取操作。这样可以极大地提高读取速度,尤其在频繁读取大量数据的场景下效果显著。

    • 为了快速定位和读取指定键的数据,MMKV使用了索引结构。索引结构可以是哈希表、跳表或B+树等,它们都具有快速查找的特性,可以高效地从内存中的字节数组中定位和获取对应键的数据。

共享数据

两个进程中共享一个计数器

在A进程:

// 初始化 MMKV 实例
MMKV.initialize(context);
MMKV mmkv = MMKV.mmkvWithID("shared_data", MMKV.MULTI_PROCESS_MODE);// 写入初始值
int counterValue = 0;
mmkv.encode("counter", counterValue);// 递增计数器
counterValue = mmkv.decodeInt("counter", 0);
counterValue++;
mmkv.encode("counter", counterValue);

在B进程:

// 初始化 MMKV 实例
MMKV.initialize(context);
MMKV mmkv = MMKV.mmkvWithID("shared_data", MMKV.MULTI_PROCESS_MODE);// 读取计数器值
int counterValue = mmkv.decodeInt("counter", 0);
System.out.println("Counter value in Process B: " + counterValue);

进程 A 和进程 B 都使用相同的进程名 "shared_data" 来初始化 MMKV 实例,并将 MULTI_PROCESS_MODE 模式用于进程共享数据。

在进程 A 中,初始时将计数器的值设置为 0,并将其存储在 MMKV 中。然后,递增计数器的值,并将更新后的值再次存储在 MMKV 中。

在进程 B 中,通过相同的进程名初始化 MMKV 实例,并从 MMKV 中读取计数器的值。由于进程 A 和进程 B 共享相同的 MMKV 实例,进程 B 将能够读取到进程 A 更新后的计数器值。

序列反序列

MMKV 本身并不提供直接的对象序列化功能,但可以使用其他库(如 Gson、Jackson 等)将对象转换为字符串或字节数组进行存储和读取。

下面是一个示例,展示了如何使用 Gson 库将对象序列化为 JSON 字符串,并存储到 MMKV 中,然后再从 MMKV 中读取并反序列化为对象。

// 定义一个自定义对象
public class Person {private String name;private int age;// 省略构造函数、getter 和 setter 方法@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}// 序列化对象并存储到 MMKV
Person person = new Person("John", 25);
Gson gson = new Gson();
String json = gson.toJson(person);
mmkv.encode("person", json);// 从 MMKV 中读取并反序列化对象
String savedJson = mmkv.decodeString("person", null);
Person savedPerson = gson.fromJson(savedJson, Person.class);System.out.println("Saved Person: " + savedPerson);

在上述示例中,定义了一个名为 Person 的自定义对象,并使用 Gson 库将其转换为 JSON 字符串。然后使用 mmkv.encode("person", json) 将 JSON 字符串存储到 MMKV 中。

在读取时,使用 mmkv.decodeString("person", null) 从 MMKV 中获取存储的 JSON 字符串。然后使用 Gson 的 fromJson() 方法将 JSON 字符串反序列化为 Person 对象。

http://www.mmbaike.com/news/105660.html

相关文章:

  • 做网站 分工云南疫情最新情况
  • 网站做接口需要哪些旅游推广赚佣金哪个平台好
  • 网站推广的优点saas建站平台
  • 网络工作室营业执照经营范围成都seo的方法
  • 建筑网片焊接机seo基础培训
  • 南充网站建设略奥2023重大新闻事件10条
  • 企业网站备案怎么办理什么是搜索引擎优化?
  • 江西省住房建设厅统计网站aso关键词优化计划
  • 热点新闻事件真实事件seo刷关键词排名优化
  • 深圳网站制作公司机构推广普通话心得体会
  • 做网站多少钱西宁君博专注网络营销的背景和意义
  • 宁国做网站西安网是科技发展有限公司
  • 地方网站模板线上运营的5个步骤
  • 开发一个app要多少钱呢windows7优化大师官方下载
  • 番禺区怎么做网站建设网络广告有哪些
  • 做深度游网站 知乎app推广方法
  • 手机网站设计制作公司百度收录教程
  • 个人设计师为什么做网站八百客crm登录入口
  • 百度上怎么做网站长沙网站定制公司
  • 建一千个网站做长尾词有效果吗打广告推广怎么做
  • 做调查问卷赚钱网站最佳磁力链ciliba
  • nodejs做网站能保护源代码吗百度竞价员
  • 建设网站如何加入搜索临沂网站seo
  • 电脑网站安全证书有问题如何解决网络营销的主要特点有哪些
  • 网站模板带后台长春seo排名外包
  • WordPress网站被恶意登录免费手机网站建站平台
  • 有没有免费做任务赚钱的网站哈尔滨seo服务
  • 网站建设培训合肥在哪里推广自己的产品
  • 天津河东区网站建设济南网站推广
  • 网站运营系统广州私人做网站