`

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

    博客分类:
  • xml
xml 
阅读更多
将XML保存为二进制数据
Flash, 二进制XML
资讯类型: 翻译
来源页面: http://www.ghostwire.com/blog/archives/as3-saving-xml-as-binary/
资讯原标题: Saving XML As Binary
资讯原作者: sunny

如果你的应该程序必须在运行期间加载一个外部大且冗长的XML文件时,这个方案可能是有用的,通过将XML保存为二进制,你可以压缩数据得到一个较小的文件,当然,你可以得到的压缩的数量取决于数据的复杂性,但它通常超过50%(保守估计)。
  无可否认的,经压缩的二进制格式的XML数据违背了摆在首位采用XML的初衷——数据可读性。因此,在程序进行前你将必须先决择哪一种更为重要。也许真实的外部数据才是你想要的——允许数据被具体化,可以改变数据而无需重新编译SWF,然而,或许你更喜欢数据不可编辑。
将XML转换为二进制数据(ByteArray)
首先,我们看看XML数据如何存储在ByteArray中。下面的代码假定您已经有名为“xmlData”字符串值变量存储XML数据:
var data:ByteArray = new ByteArray();
data.writeUTFBytes(xmlData); // xmlData is original XML string
data.compress();
保存文件
现在,您已经有二进制数据ByteArray对象,可以将该对象作为原始数据保存为文件。你可以以下任意一种方式实现。
(一)发送到服务器脚本;
(二)用AIR API保存到本地存储;或
(三)使用Flash Player 10 API保存到本地存储。
我 们会用(三),因为是这是每一个Flash开发人员最容易的方案。这个类将会使用flash.net.FileReference。FileReference.save()方法只有在Flash Player 10时才可用。它允许你保存FileReference对象中的数据至本地。
function on_buttonClick(evt:MouseEvent):void
{
        var data:ByteArray = new ByteArray();
        data.writeUTFBytes(xmlData); // xmlData is original XML string
        data.compress();
        new FileReference().save(data, "bindata.xml"); // default name "bindata.xml"
}

save()方法将打一个本地对话框——输入文件名选择存放位置后将会把XML数据存储至本地。注意保存的文件须以“.xml”作为后缀,但是该文件不是可读地——用文本编辑器打开该文件你看到的是些垃圾数据。
加载二进制XML
加载二进制文件同正常的文本XML文件加载方式一样:
var ldr:URLLoader        = new URLLoader();
ldr.dataFormat        = URLLoaderDataFormat.BINARY; // ** make sure you do this **
ldr.addEventListener(Event.COMPLETE, on_XML);
ldr.addEventListener(IOErrorEvent.IO_ERROR, on_XML);
ldr.load(new URLRequest(pathToXMLFile));
复制代码
因此,代码同正常的文本XML文件加载方式一样,除了需要将dataFormat设置为URLLoaderDataFormat.BINARY。即使你加载一个普通的文本XML文件,上面的代码也会工作得很好。
将二进制数据转换为XML
二进制XML文件加载成功后,将二进制数据转换为文本XML。
var xmlData:XML;
function on_XML(evt:Event):void
{
        if (evt.type == Event.COMPLETE)
        {
                var data:* = URLLoader(evt.target).data;
                if (data is ByteArray)
                {
                        try
                        {
                                ByteArray(data).uncompress();
                        }
                        catch(e:Error)
                        {
                        }
                }
                xmlData = XML(data);
        }
}
上面的代码,你的应用程序将能够同时处理文本XML和二进制XML文件。因此,此代码你仍可以使用,即使您目前没有使用XML存储为压缩的二进制数据。如果在以后您决定将XML采用二进制压缩格式,该应用程序也能很好的处理。
分享到:
评论

相关推荐

    xml压缩工具

    本文将深入探讨与“XML压缩工具”相关的知识点,包括XML的基本概念、压缩XML的重要性、AS3.0中的XML处理以及如何使用Flash进行XML压缩。 一、XML基本概念 XML是一种自描述性的标记语言,它的设计目标是传输和存储...

    Flex数据共享与压缩

    在Flex开发中,数据管理是核心任务之一,尤其是在处理大量数据时。"Flex数据共享与压缩"的...通过使用数据压缩和分片存储技术,我们可以确保Flex应用在面对XMLList等大数据结构时仍能保持良好的运行效率和用户体验。

    Tomcat下,使用gzip压缩数据

    在IT行业中,优化Web服务性能是一项重要的任务,其中一种常用的方法是通过开启服务器的数据压缩功能,比如在Tomcat中使用gzip来压缩数据。gzip是一种广泛使用的数据压缩算法,尤其适用于HTTP传输,它能够显著减少...

    php+pako+ajax压缩数据

    但需要注意的是,虽然压缩可以减少数据传输量,提高加载速度,但也要考虑浏览器兼容性和服务器性能,以及过度压缩可能导致的计算资源消耗。 总结一下,"php+pako+ajax压缩数据"是一个有效的优化策略,通过在服务器...

    XML数据存储源代码

    8. **性能优化**:处理大量XML时,应考虑性能优化,如使用流式API、压缩XML、减少XML深度等。 这个“XML数据存储”压缩包可能包含了示例代码,演示如何在各种编程语言中创建、读取、修改和存储XML数据。对于初学者...

    一种XML数据库的数据模型PDF,深层次讲解XML

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、文档存储和网络应用程序中。在本文档中,我们将深入探讨XML数据库的数据模型,这是一种专门设计用来高效存储和检索XML数据的...

    DuiLib_Ultimate 加载资源文件三种方法.zip

    通过`UIInterface`类的`LoadWindowFromXML`或`LoadUIFromXML`函数,可以直接加载XML文件来创建或更新界面。这种方法适合于简单的界面设计或者在程序运行过程中可能需要动态更改布局的情况。 2. **读取ZIP资源压缩包...

    用java编写的从数据库和XML中读写数据的应用程序

    本应用程序的主题聚焦于使用Java来处理数据,包括从数据库和XML文件中读取以及写入数据。这两种数据存储方式在现代软件系统中扮演着至关重要的角色。 首先,让我们深入了解一下数据库操作。Java通过JDBC(Java ...

    access数据库数据转换为xml文件

    - 大量数据:大型Access数据库转换为XML时可能生成非常大的文件,可能需要分批处理或考虑其他数据压缩和传输方式。 - XML架构:如果XML文件需要遵循特定的架构(如XSD),则在导出时需确保Access数据符合该架构...

    PHP实现XML与数据格式进行转换类.zipzip

    5. **性能优化**:考虑到性能,这个类可能使用内存效率高的方法来处理大型XML文件,比如分块读取和转换,而不是一次性加载整个文件。 6. **示例和文档**:为了方便使用,压缩包中可能包括示例代码,演示如何实例化...

    使用xml格式文件读写图像

    在IT行业中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换和存储格式,尤其在处理结构化数据时。本主题将深入探讨如何利用XML格式文件进行图像的读写操作。XML的优势在于它的可读性强、结构清晰,...

    VB6实现JPG压缩和解压缩(内存法)

    - 接收一个包含JPEG数据的Stream对象,可以使用GDI+的Image类的LoadFromStream方法加载流中的数据,创建一个Image对象。 - 这样,内存中的JPEG图像就可以被处理或显示了。 5. **错误处理和资源释放**: - 在处理...

    基于XML的移动数据传输机制.pdf

    XML文档可以包含任何类型的数据,如文本、数字、日期等,并且可以使用命名空间来避免元素名称冲突。 二、XML与移动数据传输 在移动设备上,由于资源有限,数据传输的效率和压缩性尤为重要。XML通过其结构化的特性,...

    c#中对xml文件加密和解密完整代码

    - 加载已加密的XML文件,使用`XDocument.Load()`或` XmlDocument.Load()`方法。 - 创建`EncryptedXml`对象,并使用`EncryptedXml.DecryptDocument()`方法解密整个XML文档。这个方法会查找XML中的加密部分,并使用...

    基于XMPP协议的XML数据流压缩模型研究

    相比现有的一些XML压缩工具,如XMill、XGrind、XPress,这种模型更适用于动态数据流的实时压缩,无需依赖DTD(文档类型定义)或XML Schema等格式定义文档。 在智能家居系统中,这种压缩模型的应用能够降低网络负载...

    百度地图离线API 1.3双击map.xml,可以加载里面的离线地图

    这些数据通常包括地理坐标、道路网络、兴趣点等信息,经过压缩和优化后,占用空间相对较小。当设备进入离线模式时,百度地图离线API会读取这些本地存储的数据来生成地图界面,而不是实时从服务器请求。 在百度地图...

    IIS启用GZIP压缩js、css无效的原因及解决方法.docx

    在IT开发领域,提高网站性能是至关重要的,其中一种常用的方法是启用服务器的GZIP压缩,以减小网页传输的数据量,加快页面加载速度。本文主要探讨的是在IIS服务器上启用GZIP压缩针对JavaScript(js)和CSS文件无效的...

    TinyXml中文使用指南

    在实际使用中,首先创建`TiXmlDocument`实例,然后可以加载XML文件或手动创建元素、属性和子节点。使用`FirstChild()`和`FirstChildElement()`遍历节点树,`Attribute()`获取属性,`SetAttribute()`修改属性。完成后...

    Image经典图片压缩方法

    - **PNG (Portable Network Graphics)**:虽然PNG通常用于无损压缩,但它的压缩算法(Deflate)也可以处理有损压缩,不过在处理连续色调图像时不如JPEG有效。 3. **自适应压缩**: - **Adaptive Quantization**:...

    网络游戏-一种游戏中XML数据序列化的存储方法及其专用存储装置.zip

    它可能包含优化算法,如XML压缩(如使用GZip或Deflate算法)、数据验证和错误处理机制,以确保数据的完整性和一致性。 5. 性能优化:虽然XML提供了良好的可读性,但其体积相对较大,对性能有影响。因此,在实际应用...

Global site tag (gtag.js) - Google Analytics