自从开发了AIR ,序列化一下子变得丰富了。向本地磁盘保存(比如保存配置文件等等)可以写普通文件,用内嵌的sqlite引擎。不过在我看来,还是sharedObject比较好,至少有这么几个好处:
- 直接存储actionscript数据结构,不用自己写序列化和反序列化算法。其它的像sqlite,就不得不在数据结构和字符串之间转换而且还不得不类型检查。
- 过程是同步的。 像sqlite就不得不用事件监听来读取数据,异步方式增加workflow复杂性。
不过也有些坏处:
- 存储量有限。这几乎不会是问题,有哪个AIR 会存储很多很多内容呢。
- 不够安全。除非不是一般人,否则没人知道存储在哪里。
我在公司的AIR产品上重构了配置文件部分,并开始使用sharedObject保存内容,感觉简单了很多。这里再推荐几个东西:
sharedObject查看工具:An AIR Shared Object Reader
http://blog.coursevector.com/minerva
sharedObject保存位置:
- Windows XP:
For Web sites: C:/Documents and Settings/<user>/Application Data/Macromedia/Flash Player/#SharedObjects/<random code>/<domain>/<path>/<object name>.sol
For AIR Applications, C:/Documents and Settings/<user>/Application Data/<AIR Application Reverse Domain Name>/Local Store/#SharedObjects/<flash filename>.swf/<object name>.sol - Windows Vista
C:/Users/username/<user>/AppData/Roaming/Macromedia/Flash Player/#SharedObjects/<domain>/<path>/<flash filename>.swf/<object name>.sol - Mac OS X:
For Web sites, Macintosh HD:Users:<user>:Library:Preferences:Macromedia:Flash Player:#SharedObjects:<random code>:<domain>:<path from webserver>/<object name>.sol
For AIR Applications, Macintosh HD:Users:<username>:Library:Preferences:<AIR Application Reverse Domain Name>:Local Store:#SharedObjects:<flash filename>.swf/<object name>.sol - Linux/Unix:
/home/<User>/.macromedia/Flash_Player/#SharedObjects/<domain>/<path>/<flash filename>.swf/<object name>.sol
Flash本地共享对象(SharedObject)
Flash的本地共享对象是在用户机器上实现持久化存储的数据集合。Flash可以从程序 中控制这些数据集合,向其中存入或者从中读取大量的信息数据。
使用SharedObject对象
对象说明:SharedObject(共享对象)可以看作是小型的数据库 ,我们可以用它来存储任何Flash支持的数据类型,比如数字、字符串、数组和对象等等。SharedObject按存放位置可分为本地型(存在客户端)和远程型(存在服务器 端)。本地型共享对象的扩展名为.sol。
用法:下面是关于本地型共享对象的部分最主要的方法、属性的介绍。
1)getLocal(name) 方法 “name”参数共享对象名,返回共享对象的参照
2)flush 方法 立即把数据写入共享对象
3)data 属性 存取共享对象数据的通道
只需要掌握以上这些知识就可以用共享对象来存取外部数据了。
SharedObject.getLocal(objectName [, localPath])
其中objectName是该共享对象的名字,localPath即共享对象所在路径。
// 创建一个本地保存数据的对象
var cookie:Object = SharedObject.getLocal("cookie");
方法会在默认的路径下生成一个cookie.sol文件 。文件的默认大小不能超过100k,当然可以通过鼠标右击flash 窗口,选择设置来管理或者禁用您的本地共享对象。可以让每个flash独立使用自己的SharedObject,当然也可以做一个全域的SharedObject让所有的swf使用,只要给localPath 赋值 "/"。
在 win2k和 win xp中,默认路径为C:/Documents and Settings/username/Application Data/Macromedia/Flash Player/#SharedObjects (username为机器的用户名)
每个对 象都会有一个只读属性data,用来存储被存储到“数据特性”中的对象的属性,这些属性可以共享/存储,每一个属性可以是各种基础数据类型(数组,数字布 尔值等)对象。现在cookie已经存储在 SharedObject中了,以后你可以通过对SharedObject数据属性的存取来实现对cookie的存取。例如:
cookie.data.name = "张三";
cookie.data.password = "123456";
cookie.data.rememberPassword = true;
共享对象的写入会在应用程序退出时自动执行,也可以通过cookie.flush()强制写入。
示例:按方法一设置场景,然后输入下面的代码 。
- var user_so = sharedobject.getlocal("user"); // 建立共享对象的参照
- send_btn.onRelease = function() {
- with (user_so) {
- data.name = name; //用data属性和flush方法保存用户输入的用户名
- flush();
- }
- };
本地型共享对象只能把数据保存在默认路径下,而且扩展名只能是.sol。这种方法的作用与设置cookies的作用类似。
只有必须在不同flash对象之间共享数据时才需要在SharedObject.getLocal()方法中指定path参数,将所有必须共享数据的flash对象都单独放到一个目录下。