`
flex_莫冲
  • 浏览: 1090410 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

as3压缩解压缩的第三方包及实现DEMO

    博客分类:
  • flex
 
阅读更多
用到as3 解压缩zip文件.上网找了都是只能解压缩生成bytearray,而不是直接生成文件或目录结构.所以只能自己根据bytearray手动实现..

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
					   xmlns:s="library://ns.adobe.com/flex/spark"
					   xmlns:mx="library://ns.adobe.com/flex/mx"
					   creationComplete="init()">
	
	<fx:Script>
		<![CDATA[			
			import com.coltware.airxzip.*;
			import com.coltware.airxzip.ZipEntry;
			import com.coltware.airxzip.ZipError;
			import com.coltware.airxzip.ZipFileReader;
			
			import flash.utils.ByteArray;
			import flash.utils.setTimeout;
			
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			
			[Bindable]
			private var arrColl:ArrayCollection; 
			private var outputPath:String;
			private var urlVars:URLVariables;
			private var downloadFile:File;
			private var urlReq:URLRequest;   
			private const FILE_URL:String = "http://192.168.2.3/david/plugin/oldversion/2.zip";
			private var downloadPath:String;
			private function init():void
			{
				downloadFile = new File();
				arrColl = new ArrayCollection();   
				downloadFile = new File();
				downloadFile.addEventListener(Event.CANCEL, doEvent);
				downloadFile.addEventListener(Event.COMPLETE, doEvent);
				downloadFile.addEventListener(Event.SELECT, doEvent);
				downloadFile.addEventListener(HTTPStatusEvent.HTTP_STATUS, doEvent);
				downloadFile.addEventListener(IOErrorEvent.IO_ERROR, doEvent);
				downloadFile.addEventListener(ProgressEvent.PROGRESS, doEvent);
				downloadFile.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doEvent);
			}
			
			protected function downloadZip(event:MouseEvent):void
			{
				urlReq = new URLRequest(FILE_URL);
				downloadFile.download(urlReq,"indesign.zip");
			}
			
			private function doEvent(evt:Event):void {
				var fl:File = evt.currentTarget as File;
				//trace(evt.type);
				switch(evt.type.toLowerCase()){
					case "complete":
						downloadPath = fl.url;
						uncompress();
						break;
					case "ioerror":
						Alert.show("网络地址错误");
						return;
						break;
				}
				/* Add event order and type to the DataGrid control. */
				arrColl.addItem({data:arrColl.length+1, type:evt.type, eventString:evt.toString()});   
				
				try {
					/* Update the Model. */
					fileRefModel.creationDate = fl.creationDate;
					fileRefModel.creator = fl.creator;
					fileRefModel.modificationDate = fl.modificationDate;
					fileRefModel.name = fl.name;
					fileRefModel.path = fl.url;
					fileRefModel.size = fl.size;
					fileRefModel.type = fl.type;
					/* Display the Text control. */
					txt.visible = true;
				} catch (err:*) {
					/* uh oh, an error of sorts. */
				}
			}
			
			private function showAlert(item:Object):void {
				Alert.show(item.eventString, item.type);
			}
			
			private function uncompress():void
			{
				var reader:ZipFileReader = unzip_init(fileRefModel.path);
				var list:Array = reader.getEntries();
				var file:File = new File();
				var path:String = fileRefModel.path as String;
				
				outputPath = path.substr(0, path.indexOf(fileRefModel.name)) + "indesign/";
				for each(var entry:ZipEntry in list){
					//创建文件
					
					if(entry.isDirectory()){
						file.url = outputPath + entry.getFilename();
						if(!file.exists)
							file.createDirectory();
						//trace("DIR  --->" + entry.getFilename());
					}
					else{
						var bytes:ByteArray = reader.unzip(entry);
						file.url = outputPath + entry.getFilename();
						
						file.resolvePath(outputPath + entry.getFilename());
						var fileStream:FileStream = new FileStream();
						fileStream.open(file, FileMode.WRITE);
						fileStream.writeBytes(bytes);
						fileStream.close();
					}
				}	
				reader.close();//关闭字节流。否则无法删除zip
				openIndesign();
				setTimeout(delZip,1000);
			}
			
			//删除 zip文件
			private function delZip():void
			{
				var zipFile:File = new File(fileRefModel.path);
				zipFile.deleteFile();
				
			}
			
			private function openIndesign():void
			{
				var file:File = new File();
				file.url = outputPath + "2/demo/staticImage.html";
				file.openWithDefaultApplication();
			}
			
			private  function unzip_init(filepath:String):ZipFileReader{
				var reader:ZipFileReader = new ZipFileReader();
				var file:File = new File(filepath);
				reader.open(file);
				return reader;
			}

		]]>
	</fx:Script>
	
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<fx:Model id="fileRefModel">
			<file>
				<creationDate>{""}</creationDate>
				<creator>{""}</creator>
				<modificationDate>{""}</modificationDate>
				<name>{""}</name>
				<path>{""}</path>
				<size>{""}</size>
				<type>{""}</type>
			</file>
		</fx:Model>   
	</fx:Declarations>
	<s:VGroup>
		
		<s:Button id="downloadBtn" label="download" click="downloadZip(event)" toolTip="预览"/>
		<mx:DataGrid id="debug" dataProvider="{arrColl}" width="{downloadBtn.width}" rowCount="5" rowHeight="22" itemClick="showAlert(event.currentTarget.selectedItem)">
			<mx:columns>
				<mx:DataGridColumn dataField="data" headerText="#" width="20" />
				<mx:DataGridColumn dataField="type" headerText="Type" showDataTips="true" dataTipField="eventString" />
			</mx:columns>
		</mx:DataGrid>   
		<mx:Text id="txt" condenseWhite="true" visible="false">
			<mx:text>
				creationDate: {fileRefModel.creationDate}
				creator: {fileRefModel.creator}
				modificationDate: {fileRefModel.modificationDate}
				name: {fileRefModel.name}
				path: {fileRefModel.path}
				size: {fileRefModel.size}
				type: {fileRefModel.type}
			</mx:text>
		</mx:Text>   
	</s:VGroup>
	

</s:WindowedApplication>






[转]
在现在开发的游戏中,由于战斗数据比较大,所以尝试对战斗数据进行压缩,然后输出到客户端flash端再解压。

Google到一篇文章,对照翻译工具翻译一下

在我的一些项目中,经常需要对数据做一些转换操作,所以积累一些很有意思的用于数据压缩/解压缩的第三方类库。

当然ByteArray类本身就带了数据压缩和解压缩的方法,可以用在flash player使用zlib算法和AIR程序使用多种算法。在FLASH跟PHP作为后台的编程中,我后来选择了ByteArray的compress方法来做zlib算法的压缩,用这个方法用的比较顺手,而且很快。

下面是一些第三方的类库地址以及介绍:

    AS3 Zip: AS 3 下用来读取和写入zip文件的类库
    FZip: FZip 是一个用于AS 3 下读取、创建、修改zip压缩包的类库
    ASZip: AS 3 用于创建zip文件的类库
    LZMA Encoder: AS3下使用LZMA算法压缩数据的类库.
    LZMA Decoder: 跟上面类库对应的用于LZMA算法解压缩数据.
    AsCompress: AS3下 GZIP压缩和解压缩类库,好像需要SDK版本在4.x以上,flash cs3下不可用。
    Gzip for HTTPService/URLLoader: 给你的 Flex/AIR HTTPService/URLLoader增加gzip支持
    airxzip: AIR的zip类库

如果你还知道更多的类库或者其他好东东,欢迎告知!



翻译自:http://blog.yoz.sk/2011/01/quick-tip-compression-in-flash/

While working on one of my projects where I needed compression for transfered data, I hit some very interesting compression libraries. Also the ByteArray class contains compress method, using zlib algorithm in flash player or multiple algorithms in AIR. At the end I decided to useByteArray.compress() method for encoding vs. PHP gzuncompress for decoding, what works correctly, fast and smooth.

Here is a list of 3rd party compression libraries and other good stuff:

    AS3 Zip: ActionScript 3 based library for reading and writing zip files
    FZip: FZip is an Actionscript 3 class library to load, modify and create standard ZIP archives.
    ASZip: ActionScript 3 library to generate ZIP files
    LZMA Encoder: AS3 class to compress data using LZMA algorithm.
    LZMA Decoder: A part of the apparat framework.
    GZIP: ActionScript GZIP compression library
    Gzip for HTTPService/URLLoader: Adding Gzip support for Flex/AIR HTTPService/URLLoader
    airxzip: Zip library for ActionScript3 on AIR

If you know some more, please let me know.

from: http://www.cnblogs.com/rob0121/articles/2300556.html
分享到:
评论

相关推荐

    ant 涉及第三方包问题 打包第三方包 或者添加第三方包

    ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三...

    aes第三方包

    这里提到的"aes第三方包"是针对Egret游戏引擎的一个特定库,它包含了AES加密所需的三个文件:`aes.d.ts`、`aes.js`和`aes.min.js`。 1. `aes.d.ts`:这是一个TypeScript类型定义文件,为AES库提供了静态类型支持。...

    android第三方包

    "Universal Image Loader"(简称UIL)就是一款专为Android设计的高效、强大的第三方图片加载库。这个库由Sergey Tarasevich开发,旨在解决Android原生API在处理图片时的性能和内存管理问题。 Universal Image ...

    excel第三方包

    本文将详细讨论“excel第三方包”这一主题,主要聚焦于Apache POI项目及其相关组件,以及另一个流行的库JXL。 Apache POI是Apache软件基金会的一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel...

    解决第三方包导入冲突

    然而,在某些情况下,可能会遇到"第三方包导入冲突"的问题,这主要是因为两个或更多的库依赖于相同但版本不同的类或者方法,导致编译或运行时出错。本篇将深入探讨如何解决这类问题。 首先,当遇到包冲突时,一个...

    python Gbase第三方包

    Python GBase第三方包是用于连接GBase数据库的一种工具,它为Python开发者提供了便捷的数据操作接口。GBase,全称为Golden Base,是由南大通用数据技术股份有限公司开发的一款高性能分布式数据库系统,广泛应用于大...

    unit3d 第三方包 UniWeb

    unit3d 第三方包 UniWeb 方便使用 http请求以及websocket

    Eclipse RCP中使用第三方包

    然而,在实际开发中,我们经常需要使用第三方包来实现某些功能,这篇文章将介绍如何在Eclipse RCP中使用第三方包。 首先,我们需要新建一个Eclipse RCP应用程序,然后创建一个lib目录作为存放第三方库的目录。在这...

    Java生成UUID使用的第三方包

    Java生成UUID使用的第三方包,生成UUID的第三方包,

    octave第三方包例子

    octave编写第三方包的例子

    java数据库第三方包和配置java数据库第三方包和配置

    本篇将详细探讨Java数据库第三方包的使用和配置,以及如何在项目中整合这些包。 一、常用的Java数据库第三方包 1. JDBC(Java Database Connectivity):这是Java标准API,用于与各种数据库进行通信。虽然JDBC提供...

    xcode 中 CoreData的第三方包的使用 项目源码

    3. **常见的CoreData第三方库**: - **MagicalRecord**:提供了简化的API,使得与CoreData交互变得更加便捷。 - **NSManagedObject+ActiveRecord**:模仿Ruby on Rails的ActiveRecord模式,提供了一种面向对象的...

    前端js使用jszip实现文件压缩功能

    JSZip是一个非常实用的JavaScript库,它允许我们在浏览器环境中实现文件的压缩与解压缩,无需服务器端的支持。在这个场景中,我们将讨论如何利用JSZip和FileSaver.js库在前端实现文件的压缩并下载为ZIP格式。 首先...

    java+swing打包jar转成exe 轻松加载第三方包

    这个过程涉及到将Java的JAR文件转换为Windows平台上的EXE文件,并且还需要处理第三方库的集成。以下是使用exe4j进行此操作的详细步骤和注意事项: 1. **准备阶段**: - 确保你的JAR文件、ICO图标、第三方库(存放...

    Excel(POI)第三方包

    java開發必備,導入導出excel文件

    打包可执行程序引用了第三方包)

    标题 "打包可执行程序引用了第三方包" 指的是在软件开发过程中,开发者经常会使用到外部的开源库或第三方组件来实现特定功能。这些组件可能来自不同的编程语言的包管理器,如Python的pip、Java的Maven、Node.js的npm...

    python操作Excel第三方包xlwings的操作手册

    **Python操作Excel第三方包xlwings详解** xlwings是一款强大的Python库,它使得与Excel文件的交互变得简单高效。这个库不仅支持读写Excel数据,还能修改单元格格式,同时还具备与matplotlib和pandas库的无缝对接...

    java拓扑图第三方包twaver.jar

    基于swing的拓扑图第三方包,可以快速实现网络拓扑结构的动态图形。

    java拓扑图第三方包

    java拓扑图第三方包(twaver.jar)试用版

    创建jar并引入第三方包

    本文将详细介绍如何在MyEclipse中创建JAR文件并包含第三方包。 首先,理解JAR(Java Archive)文件是一种归档格式,用于集合多个Java类文件、资源文件和元数据。JAR文件通常用于分发Java应用程序或库,可以被Java...

Global site tag (gtag.js) - Google Analytics