Autojs基础-本地存储(storages)

0 阅读4分钟

1.前言

本部分存储方式比传统脚本通过txt文件保存数据的方式更加快速,可以将数据永久保存下来。说实话,我以前真的都是通过操作txt文件的方式频繁保存或获取永久数据,降低了脚本执行效率。如果再保存永久数据,我会考虑通过txt文件和本地存储结合的方式保存数据。本地存储的方式虽然也能保存永久数据,但是卸载应用后数据就会丢失,并且不删除会一直保存。txt文件的方式真正的将数据永久保存了,卸载应用后也会保存,但是每次都得通过文件方式操作数据,降低脚本运行速度。

脚本更新会卸载应用后重新安装新应用,这个操作会导致本地存储的数据丢失。我们前面还介绍了一种global全局变量保存数据的方式,这种方式每次重启脚本都会导致数据丢失。我下面介绍下三种保存数据方式的使用场景:global用于保存全局数据,保证在不同模块读取到数据,比如相对文件路径;txt文件用于保存不需要频繁修改的永久数据,保证脚本应用重装后也能获取到数据,比如战斗配置;本地存储用于频繁更新的永久数据,保证不用每次启动脚本重新获取数据,比如运行环境信息和每日任务信息

虽然介绍这么多,但是真正用的比较多的还是global和txt文件的方式。我以前没有了解本地存储的方式,通过写文章确实又学习到了一些新函数。我本人是比较喜欢写这种文章的,既能分享自己的知识,又能考虑到一些新东西,而这些新东西只有再不断加深知识的情况下才能产生。我当初的构想是单独教一下用安卓来操作内存信息,这是需要配置大量信息,主要是容易产生版本冲突,还要自学C++,这难度成倍增加。通过写这些文章,我突然考虑到,我能不能做一个内存操作通用文件,大家不用考虑那些问题了,然后在我插件中封装各种函数,大家根据通过调用函数来完成内存操作。我想想都觉得这个工作量巨大,但是我还是想尝试下。

2.函数

由于这部分函数都很简单,如果熟悉js的本地存储就会觉得似曾相识的感觉。我也不一一介绍了,最终会通过一个代码介绍完所有功能。但是,大家可以放心,我会写好注释的。需要注意是,本地存储只支持数字、boolean和字符串等简单数据类型,对象和数组等复杂数据需要转换为字符串再进行存储。并且,通过打印发现storages.remove函数不会任何值,官方文档介绍有问题。

// 模拟一个文件中添加数据
// 创建一个本地存储对象
let storage = storages.create("py");
// 往存储对象中添加数据
storage.put("test", 123);
let obj = {
    test1: 123,
    test2: "456"
};
// 将对象转化为字符串
let objString = JSON.stringify(obj);
storage.put("obj", objString);


// 模拟另一个文件中取出数据
// 创建一个本地存储对象
// 和上面对象一样,由于不同文件,再创建一个
let getStorage = storages.create("py");
let test = getStorage.get("test");
console.log("test:" + test);
// 获取对象字符串
let newObjString = getStorage.get("obj");
//将对象字符串重新转换为对象
let newObj = JSON.parse(newObjString);
console.log("obj 类型为" + (typeof newObj) + ",数据为"  + newObj.test1 + "," + newObj.test2);

// 判断原来test属性是否存在
let hasExist = getStorage.contains("test");
console.log("原来test属性是否存在:" + hasExist);

// 删除test属性
getStorage.remove("test");

// 判断删除后test属性是否存在
hasExist = getStorage.contains("test");
console.log("删除后test属性是否存在:" + hasExist);

// 判断原来obj属性是否存在
hasExist = getStorage.contains("obj");
console.log("原来obj属性是否存在:" + hasExist);

// 清空本地存储内容
getStorage.clear();

// 判断清空后obj属性是否存在
hasExist = getStorage.contains("obj");
console.log("清空后obj属性是否存在:" + hasExist);


// 删除本地存储,不会返回值,说明官方文档介绍错了
let hasRemove = storages.remove("py");
console.log("是否删除本地存储成功:" + hasRemove);

3.总结

特别注意,只有通过个人主页博客或者个人介绍中方式,才能获取源码