xml文件转二进制文件的AIR

游戏开发中,有很多XML可能是很大的,比如一个任务配置文件,可能就接近2M(当然全部文件放在一个XML里面本身就有问题,比较好的做法就是分等级分隔XML),这样就需要对XML进行压缩。之前把文件压成ZIP包,然后读取ZIP,但现在读取ZIP文件里面的内容,是很卡的,后面改成读取二进制的XML数据,这样感觉不会卡,速度也很快。

实现思路也比较简单,使用二进制读取文件,然后调用保存。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
                        width="900" height="350"
                        creationComplete="init()"
                        alwaysInFront="false">
    
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            
            private var filePath:String;
            private var fileBytes:ByteArray;
            
            private function init():void
            {
                var funArr:Array = [];
                
                this.showStatusBar = true;
                this.status = "Copyright©2012 meteoric_cry.net.  Powered by Meteoric_cry";
                
                bindBtnsEvent();
            }
            
            private function showTopHandler():void 
            {
                if (this.stage.nativeWindow.alwaysInFront)
                {
                    this.stage.nativeWindow.alwaysInFront=false;
                    showTopBtn.label="前端显示";
                }
                else
                {
                    this.stage.nativeWindow.alwaysInFront=true;
                    showTopBtn.label="√前端显示";
                }
            }
            
            private function bindBtnsEvent():void
            {
                selectBtn.addEventListener(MouseEvent.CLICK, onSelectHandler);
                compressBtn.addEventListener(MouseEvent.CLICK, onCompressHandler);
                saveBtn.addEventListener(MouseEvent.CLICK, onSaveHandler);
            }
            
            private function getTypeFilter():FileFilter
            {
                var str:String = "*.xml;";
                
                var filter:FileFilter = new FileFilter("XML("+str+")", str);
                
                return filter;
            }
            
            private function onSelectHandler(evt:MouseEvent):void
            {
                var file:File = new File();
                file.addEventListener(Event.SELECT, selectFileCallback);
                file.browseForOpen("请选择一个文件", [getTypeFilter()]);
            }
            
            private function selectFileCallback(evt:Event):void
            {
                clear();
                
                var file:File = File(evt.target);
                file.removeEventListener(Event.SELECT, selectFileCallback);
                
                filePath = file.nativePath;
                
                xmlPathIpt.htmlText = filePath;
            }
            
            private function clear():void
            {
                xmlPathIpt.htmlText = "";
                
                filePath = null;
                fileBytes = null;
            }
            
            private function onCompressHandler(evt:MouseEvent):void
            {
                if (filePath)
                {
                    var file:File = new File(filePath);
                    
                    if (file.isDirectory == false && file.exists)
                    {
                        var fs:FileStream = new FileStream();
                        fileBytes = new ByteArray();
                        
                        fs.open(file, FileMode.READ);
                        fs.position = 0;
                        fs.readBytes(fileBytes, 0, fs.bytesAvailable);
                        fs.close();
                        
                        fileBytes.compress();
                        
                        Alert.show('文件压缩成功', '温馨提示', Alert.OK);
                    }
                    else
                    {
                        Alert.show(filePath + "不是一个正确的文件路径", '温馨提示', Alert.OK);
                    }
                }
                else
                {
                    Alert.show('请选择要压缩的文件', '温馨提示', Alert.OK);
                }
            }
            
            private function onSaveHandler(evt:MouseEvent):void
            {
                if (fileBytes)
                {
                    var fileName:String = new File(filePath).name.replace(/\.xml/, '');
                    
                    new FileReference().save(fileBytes, fileName + ".swf");
                    
                    Alert.show("文件" + fileName + ".swf保存成功", '温馨提示', Alert.OK);
                }
                else
                {
                    Alert.show('请先选择文件并进行压缩', '温馨提示', Alert.OK);
                }
            }
            
        ]]>
    </mx:Script>
    
    <mx:Button label="前端显示" right="10" top="3" click="showTopHandler();" id="showTopBtn"/>
    
    <mx:HBox width="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" 
             paddingTop="100" paddingLeft="50" paddingRight="10" paddingBottom="10" 
             horizontalGap="0" verticalAlign="middle">
        
        <mx:Label text="请选择要进行压缩的文件:" />
        <mx:TextInput id="xmlPathIpt" width="400" editable="false" paddingLeft="2" paddingRight="2" />
        
        <mx:HBox width="100%" paddingLeft="20">
            <mx:Button id="selectBtn" label="选择文件" />
            <mx:Button id="compressBtn" label="压缩文件" />
            <mx:Button id="saveBtn" label="保存文件" />
        </mx:HBox>
        
    </mx:HBox>
    
</mx:WindowedApplication>

点击此处下载AIR>>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Wordpress专用主机|主题模板|必备插件

如何手动配置WordPress浏览器缓存

5755
来自专栏FreeBuf

htcap:一款实用的递归型Web漏洞扫描工具

今天给大家介绍的是一款名叫 htcap 的开源 Web 漏洞扫描工具,它通过拦截 AJAX 调用和页面 DOM 结构的变化并采用递归的形式来爬取单页面应用(SP...

3503
来自专栏一“技”之长

iOS 封装静态库(.a文件) 原

iOS中导入外部文件,一种是将源码导入,一种是导入静态库,有很多第三方库都是以静态库的形式提供给我们使用的,如何制作一个静态库呢?

953
来自专栏Jerry的SAP技术分享

如何在Kubernetes里创建一个Nginx应用

使用命令行kubectl run --image=nginx nginx-app --port=80 创建一个名为nginx-app的应用

3402
来自专栏北京马哥教育

Linux 下使用 Sar 简介

介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等)。Linux 下也有法国人写的 ...

4017
来自专栏about云

zookeeper思考与总结1:在其它组件的作用及hdfs对比

一、zookeeper在其它组件的作用 1.为什么会产生zookeeper zookeeper是模仿的谷歌的Chubby来解决分布式一致性的问题。2006年的时...

4035
来自专栏Android干货

安卓开发--android library projects cannot be launched错误

3415
来自专栏木子昭的博客

img标签随机获取高质量图片

2071
来自专栏北京马哥教育

五分钟快速学习 Python + Echarts

云豆贴心提醒,本文阅读时间5分钟,文末有秘密! ECharts,是百度开源的一个项目,纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上...

1.1K5
来自专栏运维小白

Linux基础(day3)

1.9 使用PuTTY远程连接Linux 记得使用快照功能 (数据备份) 熟练使用putty和xshell (个人使用免费) putty官网下...

2009

扫码关注云+社区

领取腾讯云代金券