当获得数据共享对象的引用之后,通过向数据对象分配值来在共享对象中存储数据,可以按照操作动态类对象的方式,操作共享数据。数据类型以复制的类型为准。但是数据共享对象的数据需要存储在data属性引用的内存中。
共享数据的赋值如以下示例所示:
var shareobj:SharedObject = SharedObject.getLocal("tempCookie");
trace(shareobj.size);
shareobj.data.shaka="some string is here."
trace(shareobj.size);
shareobj.data.art=new Array(true,"Math",3.14159);
trace(shareobj.size);
trace(shareobj.data.shaka);
trace(shareobj.data.art[1]+shareobj.data.art[0]);
代码中创建了两个新的项目:shaka存储一个字符串,art则存储一个数组。数组中,包含布尔类型的变量、字符串、浮点数。如果不存在相应的数据,则自动创建新的数据。如果已经存在同名的数据项,则用新的数据替换原有数据。该过程不考虑新旧数据的类型匹配。
代码的执行输出为:
0
61
85
some string is here.
Mathtrue
当数据共享对象被创建时,其大小为0,随着元素的不断添加,数据共享对象的size越来越大。如果再次运行此程序,则数据共享对象的大小将保持在85。因为该数据共享对象已经在第一次运行时被创建了。
使用SharedObject.size属性可以确定共享对象是否存在。为了防止无意间清除了现存数据,应该在进行赋值操作之前,检测数据项的存在。
数据共享对象在Flash的执行期间不会写入磁盘。FlashPlayer会在共享对象会话结束时,将共享对象写入文件。如果SWF文件关闭,或者共享对象将被作为内存垃圾而回收时,都将自动写入磁盘以避免数据的丢失。
调用SharedObject.clear()或SharedObject.close()方法时,FlashPlayer会立刻将数据写入磁盘。如果想确保数据写入磁盘,同时又不想使用SharedObject.clear()或SharedObject.close()方法,则应该在代码中调用flush()方法。
flush()方法包含一个以字节为单位的数值参数,用来指派必须分配给此对象的最小磁盘空间。根据是否要继续添加数据,该参数会有所变动。尽量不要使用现有数据共享对象的size作为空间大小。调用flush()方法后,将会有两种返回值:
Ø SharedObjectFlushStatus.PENDING:用户允许来自此域的对象进行本地信息存储,但所分配的空间量不足以存储该对象。FlashPlayer将提示用户允许更多空间。
Ø SharedObjectFlushStatus.FLUSHED:共享对象已成功写入本地磁盘上的文件。
客户系统的环境多变而且复杂,应该检查该方法的返回值,在写入失败时及时处理。