您的位置:首页 > 大数据 > 人工智能

flash,AIR的本地存储初步了解

2013-02-04 21:45 246 查看
呃,只是今天在做手机上的air程序的存储,所以稍微看了下flash,air的存储本地数据方面的知识。

存储本地数据的方法其实有不少,最简单的就是用shareObject了,的确是最简单的了,基本属于零基础就能用的了。shareObject直译为共享对象(有时称为“Flash cookie”)是一个数据文件,可以将数据存储到用户的本地硬盘上,然后在同一会话期间或以后的会话中调用这些数据。各应用程序仅能访问它们自己的 SharedObject 数据,而且仅当它们在同一域中运行时才能访问。不会将这些数据发送到服务器,并且在其他域中运行的其他应用程序不能访问这些数据,但同一域中的应用程序可以访问这些数据。

共享对象有以下属性:

• 默认情况下不会到期。

• 默认情况下,每个共享对象的大小限制为 100 KB。

• 可以存储简单的数据类型(例如字符串、数组和日期等)。

• 存储在应用程序指定的位置(位于用户的主目录中)。

• 永远不会在客户端和服务器之间传输。

可以看出,ShareObject的限制就是单个文件大小不能超过100k,但是这些对于存储小的数据也绰绰有余了。另外,假如保存成功的话共享对象的大小将超过 100 KB,则 Flash Player 将显示“ 本地存储区” 对话框,用户可在该对话框中允许或拒绝为请求访问的域增加本地存储区。

ShareObject的方法有

clear()清除数据,删除ShareObject;

flush()立即将数据刷入文件;

getLocal()返回ShareObject的引用,不存在的话就新建一个(很方便)

getSize()获取存储数据的文件大小

使用的方法如下:

public var mySO:SharedObject;
mySO = SharedObject.getLocal("preferences");


这样就可以在默认的用户主目录的子目录下创建一个叫做preferences.sol的文件了,里面存有数据

这个目录在不同系统下会有变化(但是一般的话,其实不用太过关注...因为这一切都是自动的)

So.data.first = "animal";这样就可在first上存一个"animal"值了

读的时候直接用So.data.first就可以了

其他的还有个就是数据加密的问题,这里需要注意的一个是在用air开发Android应用时,Android 操作系统为每个应用程序分配一个单独的用户 ID。应用程序只能访问自己的文件和在公共位置创建的文件(如移动存储卡)。注意,在 Android 的“ 根” 设备上,使用根权限运行的应用程序可以访问其他应用程序的文件。因此,在根设备上,加密的本地存储不提供与非根设备上级别一样高的数据保护。

另外再说一个air里的File类,

File 对象表示文件或目录的路径。这可以是现有的文件或目录,也可以是尚不存在的文件或目录(例如,它可以表示希望创建的文件或目录的路径)。

File 类包含一些静态属性,供引用常用目录位置。这些静态属性包括:

•File.applicationStorageDirectory — 每个已安装的 AIR 应用程序独有的存储目录

•File.applicationDirectory — 安装应用程序的只读目录(其中包括所有已安装的资源)

•File.desktopDirectory — 用户的桌面目录

•File.documentsDirectory — 用户的文档目录

•File.userDirectory — 用户目录

有了这些属性,就可以不用担心因为使用了文本常量形式的本机路径(如"C:\Documents and Settings\test.txt"),结果只在一个平台上有效的问题了。

跨平台的时候效果很好,使用示例如下,此代码会指向应用程序存储目录中的 preferences.xml 文件

var prefsFile:File = File.applicationStorageDirectory;

  prefsFile = prefsFile.resolvePath("preferences.xml");

但是要注意的一点是File.applicationDirectory是个只读目录,所以不能直接利用这个地址写入,但是用一个new之后,问题就可以得到解决

var file:File = new File(File.applicationDirectory.resolvePath("preferences.xml").nativePath);


下面这个例子演示了如何读入本地的xml数据文件,修改其中数据的过程。
var countFile:File = new File(File.applicationDirectory.resolvePath("Levels/levelCount.xml").nativePath);

//open for the first time
var fileStream:FileStream = new FileStream();
fileStream.open(countFile,FileMode.READ);

var content:XML = new XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
content.cnt=(currentLevel+1).toString();

//open for the second time in order to write data
fileStream.open(countFile,FileMode.WRITE);
fileStream.writeUTFBytes(content.toXMLString());
fileStream.close();

另外的话,其实还有很多种方法(如在 AIR 中使用本地 SQL 数据库),每一种深入的话也都可以很深入...

虽然现在已经在使用的是这么用,不过因为理解的不是很深,所以有些地方的限制还不太了解...以后再看看有没有机会加深理解来修正,更新笔记吧~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: