如果你的应该程序必须在运行期间加载一个外部大且冗长的XML文件时,这个方案可能是有用的,通过将XML保存为二进制,你可以压缩数据得到一个较小的文件,当然,你可以得到的压缩的数量取决于数据的复杂性,但它通常超过50%(保守估计)。
  无可否认的,经压缩的二进制格式的XML数据违背了摆在首位采用XML的初衷——数据可读性。因此,在程序进行前你将必须先决择哪一种更为重要。也许真实的外部数据才是你想要的——允许数据被具体化,可以改变数据而无需重新编译SWF,然而,或许你更喜欢数据不可编辑。
将XML转换为二进制数据(ByteArray)
首先,我们看看XML数据如何存储在ByteArray中。下面的代码假定您已经有名为“xmlData”字符串值变量存储XML数据:

  1. var data:ByteArray = new ByteArray();
  2. data.writeUTFBytes(xmlData); // xmlData is original XML string
  3. data.compress();

保存文件
现在,您已经有二进制数据ByteArray对象,可以将该对象作为原始数据保存为文件。你可以以下任意一种方式实现。
(一)发送到服务器脚本; 
(二)用AIR API保存到本地存储;或
(三)使用Flash Player 10 API保存到本地存储。 
我 们会用(三),因为是这是每一个Flash开发人员最容易的方案。这个类将会使用flash.net.FileReference。FileReference.save()方法只有在Flash Player 10时才可用。它允许你保存FileReference对象中的数据至本地。

  1. function on_buttonClick(evt:MouseEvent):void
  2. {
  3. var data:ByteArray = new ByteArray();
  4. data.writeUTFBytes(xmlData); // xmlData is original XML string
  5. data.compress();
  6. new FileReference().save(data, "bindata.xml"); // default name "bindata.xml"
  7. }

save()方法将打一个本地对话框——输入文件名选择存放位置后将会把XML数据存储至本地。注意保存的文件须以“.xml”作为后缀,但是该文件不是可读地——用文本编辑器打开该文件你看到的是些垃圾数据。
加载二进制XML
加载二进制文件同正常的文本XML文件加载方式一样:

  1. var ldr:URLLoader        = new URLLoader();
  2. ldr.dataFormat        = URLLoaderDataFormat.BINARY; // ** make sure you do this **
  3. ldr.addEventListener(Event.COMPLETE, on_XML);
  4. ldr.addEventListener(IOErrorEvent.IO_ERROR, on_XML);
  5. ldr.load(new URLRequest(pathToXMLFile));

复制代码

因此,代码同正常的文本XML文件加载方式一样,除了需要将dataFormat设置为URLLoaderDataFormat.BINARY。即使你加载一个普通的文本XML文件,上面的代码也会工作得很好。
将二进制数据转换为XML
二进制XML文件加载成功后,将二进制数据转换为文本XML。

  1. var xmlData:XML;
  2. function on_XML(evt:Event):void
  3. {
  4. if (evt.type == Event.COMPLETE)
  5. {
  6. var data:* = URLLoader(evt.target).data;
  7. if (data is ByteArray)
  8. {
  9. try
  10. {
  11. ByteArray(data).uncompress();
  12. }
  13. catch(e:Error)
  14. {
  15. }
  16. }
  17. xmlData = XML(data);
  18. }
  19. }

上面的代码,你的应用程序将能够同时处理文本XML和二进制XML文件。因此,此代码你仍可以使用,即使您目前没有使用XML存储为压缩的二进制数据。如果在以后您决定将XML采用二进制压缩格式,该应用程序也能很好的处理。

加载大量的xml数据 使用压缩方法解决(当然较小时也可以压缩)的更多相关文章

  1. html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据

    1.DSO也叫做数据源对象,IE 4.0引入了DSO,在IE 5.0对DSO技术进行很大的扩展.以往如果数据是通过SQL语言对数据库进行查询得到的结果,那么就把它们存放在ADO(ActiveX Dat ...

  2. Smart3D系列教程7之 《手动配置S3C索引加载全部的瓦片数据》

    一.前言 迄今为止,Wish3D已经出品推出了6篇系列教程,从倾斜摄影的原理方法.采集照片的技巧.Smart3D各模块的功能应用.小物件的照片重建.大区域的地形重建到DSM及正射影像的处理生产,立足于 ...

  3. D3.js加载csv和json数据

    1.加载数据的基本命令 D3提供了方法可以对不同的数据类型进行加载,比如d3.text(), d3.xml(), d3.json(), d3.csv(), 和d3.html(). <!DOCTY ...

  4. KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据

    Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...

  5. Web.xml配置详解之context-param (加载spring的xml,然后初始化bean看的)

    http://www.cnblogs.com/goody9807/p/4227296.html(很不错啊) 容器先加载spring的xml,然后初始化bean时,会为bean赋值,包括里面的占位符

  6. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  7. jqgrid 分页时,清空原表格数据加载返回的新数据

    由于,我们是动态分页,分页后的数据是在触发分页后动态加载而来.如何使jqgrid清空原数据而加载新数据? 1)调用jqgrid的 clearGridData 方法清空表格数据 2)调用jqgrid的  ...

  8. 第六章:加载或保存JSON数据

    加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多 ...

  9. ExtJS ComboBox同时加载远程和本地数据

    ExtJS ComboBox同时加载远程和本地数据 原文:http://gblog.hbcf.net/index.php/archives/233 ComboBox比较特殊需求,将远程数据和本地数据同 ...

随机推荐

  1. 使用coding云作为git远程库

    1.在命令行中创建GIT仓库 mkdir DriveAssistant cd DriveAssistant git init echo "# DriveAssistant" > ...

  2. C#矩形框沿直线移动

    C#中用GDT+的一系列方式,可以绘制各种图形:点,直线,圆形,矩形...... C#中这些图形的绘制,一般教程的demo中给出的代码,是在Form1_Paint(object sender, Pai ...

  3. 服务器或普通PC裸机安装 ESXI6.5

    ESXI :安装包 http://pan.baidu.com/s/1c2gM0Xq (包含注册机和其他套件,驱动打包工具) ESXI 6.5 在服务器安装比较方便,一般intel 的网卡都没多大问题, ...

  4. 洛谷 P1897电梯里的爱情 题解

    题目传送门 对于每个输入的第i个人,直接使用桶,但注意范围要开大一些. #include<bits/stdc++.h> using namespace std; ],x,sum,h,Max ...

  5. android开发笔记,杂

    Mapping文件地址: mapping文件用于在代码被混淆后,还原BUG信息. release模式编译项目即可产生,相对位置:工程\build\outputs\mapping\release 需要c ...

  6. js获取url链接地址的参数

    访问地址为:http://XXX.com?style=green <script language="javascript"> var getArgs = functi ...

  7. 【caffe-Windows】微软官方caffe之matlab接口配置,以及安装caffe的注意事项

    1.在此之前,记录一下之前的错误,在参考博客[caffe-Windows]caffe+VS2013+Windows+GPU配置+cifar使用进行caffe的安装时,其中的一些步骤可以不做,具体见下图 ...

  8. char *s 和char s[]的区别

    char *s 和 char s[] 的区别小结 博客分类: C语言 c教育 . 最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区( ...

  9. Java经典设计模式之十一种行为型模式

    转载: Java经典设计模式之十一种行为型模式 Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式 ...

  10. Ngnix的日志管理和用定时任务完成日志切割

    一.日志管理 先来看看ngnix的配置文件的server段 接下来我们解释一下默认格式的具体意思 #log_format main '$remote_addr(远程IP) - $remote_user ...