Flash AS3 Base64
FlashAS3.0强大的事件机制

FlashAS3.0强大的事件机制ActionScript 3.0系列教程(5):强大的事件机制回顾和比较AS1.0玩家最爱用onClipEvent(), on(),又方便又直接。
缺点在于逻辑分散到了各个舞台元件中,难以管理和维护。
更加别说代码重用了。
别跟俺说可以Copy, Paste,这不叫重用,这叫低级。
AS2.0中,增加了一些事件处理机制:(1)回调函数: onLoad, onComplete等。
相信兄弟们最熟悉的应该就是XML.onload回调函数了。
(2)事件侦听器型:这个就是addListener(), addEventListener()这种类型的。
发送事件有的是内置,有的通过dispatchEvent(). 嗯,这种事件机制基本上就和AS3.0很像了。
自从使用了ActionScript 2.0来开发项目,黑羽就尽可能的多用这种事件处理机制。
这个习惯很好,基本上让黑羽对3.0的机制很快适应过来。
说道这里,黑羽要多扯几句2.0,抱怨一下它的不足,再让大家看看AS3.0的光明大道:(1)2.0中除了UIComponent能自己发送事件,绝大部分类不能自己发送事件的,比如MovieClip, 或者一些自定义的类。
黑羽还制作了一个EventSender的事件发送类来解决。
当然你可以通过扩展来解决MovieClip这些类来解决,但是在一些轻量级或者特殊运用中,还是用黑羽这个EventSender类更加方便。
比如说,你突然需要舞台上某个A_mc的运行到第20帧时发送一个"finished"事件出来,并且希望另外某个B_mc能够捕捉到这个事件,那么用一般的扩展方法不知道有多么麻烦!(1、要重做一个带有事件发送功能的类和A_mc通过某种方式绑定。
2、同时确保在B_mc中要能访问到发送事件的对象并addEventListenr)。
而用俺的EventSender类非常简单,A_mc中写EventSender.send("finished", this),B_mc中写Event Sender.addListener("finished", listenerFunc),并可以通过event.target属性直接定位A_mc,真是简单的不能再简单了。
FlashAS3.0数据类型详细介绍

FlashAS3.0数据类型详细介绍数据类型的说明基元数据类型包括Boolean、int、Null、Number、String、uint 以及 void。
ActionScript 3.0核心类还有下列复杂数据类型:Object、Array、Date、Error、Function、RegExp、XML 以及 XMLList。
常用数据类型介绍:Boolean 数据类型Boolean 数据类型包含两个值:true 和 false。
或者是0 和1 ,对于Boolean 类型的变量,其它任何值都是无效的。
已经声明但尚未初始化的布尔变量的默认值是 false。
int 数据类型int 数据类型在内部存储为32 位整数,它包含一组介于-2,147,483,648 (-231) 和 2,147,483,647 (231 - 1) 之间的整数(包括-2,147,483,648 和 2,147,483,647)。
早期的 ActionScript 版本仅提供 Number 数据类型,该数据类型既可用于整数又可用于浮点数。
在ActionScript 3.0 中,现在可以访问 32 位带符号整数和无符号整数的低位机器类型。
如果您的变量将不会使用浮点数,那么,如果某变量永远是正整数,那么该变量使用 int 数据类型来代替 Number 数据类型应会更快更高效。
对于小于int 的最小值或大于int 的最大值的整数值,应使用Number 数据类型。
Number 数据类型可以处理-9,007,199,254,740,992 和9,007,199,254,740,992(53 位整数值)之间的值。
int 数据类型的变量的默认值是 0。
Null 数据类型Null 数据类型仅包含一个值:null。
这是 String 数据类型和用来定义复杂数据类型的所有类(包括 Object 类)的默认值。
其它基元数据类型(如 Boolean、Number、int 和 uint)均不包含 null 值。
flashas3.0位图和滤镜

18.2.2 设置单个像素
• 若要想更改位图中包含的某个像素的颜色或透明 度,则可以使用setPixel()方法或setPixel32() 方法。若要设置像素的颜色,则这两种方法都可 以使用。
• setPixel()方法用于设置BitmapData对象的单个 像素值。此方法会保留图像像素的当前Alpha通道 值。其用法格式如下所示:
• 位图图像是用图像的宽度和高度来定义,以像素为量度单 位。其中像素是指位图图像中的最小信息单位,表示在屏 幕中显示的单个不同颜色的点。每个像素由对应的颜色值 来表示。在使用RGB颜色表示的位图图像中,像素由红、绿 和蓝三个字节组成,每个字节包含一个0到255之间的数字。 将三个字节合并成为一个颜色值,应用于显示对象,就能 够产生与绘画颜色相似的颜色。
null。 • pixelSnapping:确定Bitmap对象是否贴紧至最近的像素。
默认值为“auto”。 • smoothing:确认在缩放时是否对位图进行平滑处理。默认
值为false。
18.1.5 加载外部图像
• 在ActionScript 3.0中支持加载外部的位图图像到位图中。加载外部的图 像,需要使用显示对象的Loader类的load方法来实现。具体实现请参见 22.1节。
18.1.2 Bitmap类
• Bitmap类用来表示位图图像的显示对象。这些图像可以是使用显 示对象的Loader类加载的外部图像,也可以是使用Bitmap()构造 函数创建的图像。Bitmap类创建的图像,其信息可以使用其 BitmapData属性来引用并处理。Bitmap对象是一种显示对象,因 此可以使用显示对象的属性和方法来进行操作和控制。此外, Bitmap对象还有两个常用的属性:PixelSnapping象素贴紧和 smoothing平滑。
第10章_Flash AS3.0事件处理

数后,事件对象将作为一个参数传递给该函数,然后执行这个 事件响应函数。
二维动画设计
ห้องสมุดไป่ตู้ 用户
回车 按下 释放 单击
……
事件目标 文本框 按钮bt ……
执行事件响应函数
hd1() hd2() ……
注 册
bt.addEventListener
(MouseEvent. MOUSE_DOWN,hd1);
事
件
bt.addEventListener
侦 (M(MoouuseseEEvveennt.tD. OMUOBULES_EC_LUICPK,h,hdd22););
听
……
二维动画设计
例:控制人物走路(一个对象上注册多个事件)
TimeEvent
KeyboardEvent
MouseEvent
Event
…其他子类
SoundEvent ContextMenuEvent
二维动画设计
ActionScript 3.0事件侦听机制简介
❖ Event类属性
事件对象继承自 Event 对象类,它的一些属性包含了有关所发生事 件的信息,其中包括提供事件基本信息的 target 和 type 属性:
二维动画设计
ActionScript 3.0事件监听过程
1.确定事件目标 ❖ 一个作为事件发送目标的对象被称为事件目标 2.注册事件侦听 ❖ 方法:addEventListener(),在事件目标上注册事件侦听函数。 ❖ 事件侦听函数就是针对某个特定事件定义的一个响应函数(方法) ❖ 可以在一个对象上注册若干个事件帧听函数,对应不同的事件,
《Flash AS3从入门到精通》90天综合课程提纲912

《Flash AS3 从入门到精通》90天综合课程提纲前言:为了更好的满足广大游戏开发爱好者不同层次的需求,解决游戏公司用人要求中注重开发质量和项目经验的问题,天地培训特推出Flash游戏开发,"基础+进阶+实训"的90天综合课程。
基础课程:帮助基础较差的学员学习编程语言的基本用法,系统的学习JavaScript基本语法,以及如何用程序化的思想去分析,思考和设计游戏。
进阶课程(AS3游戏编程):1.学习FlashProfessional的基本用法,系统的学习AS3基本语法,以及如何用程序化的思想去分析,思考和设计游戏.课程结束后一般学员可独立完成"打砖块"等简单游戏.2.FlashBuilder的用法,继承封装等OOP概念和方法,以及核心显示架构,事件,事件流,位图,声音,网络通信等重要内容,重点是如何使用面向对象的方法去分析,设计和实现一些较复杂的项目.如<雷电>,塔防游戏等.实训课程:主要是模拟现实中游戏公司如何立项,制定项目计划,团队成员之间如何协作开发,如何对项目资源和代码的版本化管理等,让学员在进入公司工作以后,可以很快的融入到公司正常项目中.本阶段课程要求学生在讲师的指导下独立设计和开发一款完整的游戏.学习目标1、打下牢固的编程语法基础,学习面向对象编程思想,能够理解类、对象、继承、多态、接口等OOP 概念,学习简单常用的设计模式;2、建立良好的编程习惯,能够写出高可读性的代码,能够按照规范命名变量、定义方法、流程控制等;3、学习标准的面向对象开发流程,严格按照OOA——OOD——OOP的流程开发应用程序、网页游戏、手机游戏等。
4、熟悉如何与设计师、后台技术工程师协同工作,能熟练掌握常用的Flash开发工具。
第一部分:基础课程一、JavaScript编程语言1.了解什么是程序?目前主流的编程语言有哪些。
了解从事IT行业所应具备的技能和知识。
Flash AS3.0 数组应用

Flash AS3.0 数组应用数组有两种形式:第一种:数字形式的数组:var myNumber:Array = new Array(1,2,3,4,5);第二种:文本形式的数组:var myString:Array=["张志晨","王升军","宋广佳"]换言之,数组的值是字符串型的应该用[ ] 创建,是数字型的则用( )创建。
创建一维数组,同时也进行了初始化。
2 数组应用push 在数组尾部增加一个元素pop 删除数组的最后一个元素shift 删除数组的第一个元素indexof 返回该元素在数组中的位置sort 对数组进行自定义排序splice 将元素添加到指定的位置并删除所需元素concat 将指定的元素与原来的数组连接join 将数组中的元素转为字符串,在元素之间插入指定分隔符,返回字符串unshift 在元素的开始增加一个元素reverse 把现有的数组的顺序完全倒过来这里都是常用的一些方法,经常会用到,还老是忘记,这里就稍微总结下,在做游戏和一些程序的时候会经常用到,用数组来存取读取简单的数据还是非常容易方便的。
3 理解数组[学习笔记]数组:也叫索引数组。
索引数组是一个对象,其属性由表示该属性在数组中位置的数字来标识。
此数字称为索引。
所有索引数组都从零开始,这意味着数组中的第一个元素为[0],第二个元素为[1],依此类推。
4 创建数组[学习笔记]若要创建一个Array 对象,请使用构造函数new Array()。
如:var myNumber:Array = new Array(1,2,3,4,5);5 访问数组[学习笔记]访问数组中的元素,请使用数组访问运算符([])。
如:myNumber[0] = 1;6 多维数组[学习笔记]您可以创建一个多维数组。
方法是创建一个索引数组,然后给它的每个元素分配不同的索引数组。
这样的数组被视为是多维的,原因是它可用于表示表中的数据。
学习Flash as3中面向对象的特点
习Flash as3中面向对象的特点以下是我在学习Flash as3中整理的相关文档和讨论之后,结合自己的亲自实验总结出来的一些经验和心得。
供大家学习很参考,当然也希望所有看官提出批评意见。
为了表述方便,其中术语不限定语言,如我可能会一会儿用class,一会儿用“类”。
面向对象的难点部分就是理解变量作用域修饰符(modifier)其实也就是面向对象中我们已经熟悉的public、protected、private等等。
本文还深入讨论了ActionScript3中新增的internal等概念。
下面我依次列出:一、关于package以及internalpackage,用“形而上学”的方式理解,就是物理目录下的类集合。
在AS2中只需要保证文件系统的路径匹配,然后用类似“import com.awflasher.someUtils”的方法导入即可。
而AS3则要求您在所有的类中声明package关键词。
package 的大括号对“{}”内,我们只能定义一个类,我们可以在这个大括号外面定义一些辅助类,不过这些类只能被当前这个类(你在package大括号对内定义的类)访问。
当然,一个package大括号对内只有一个类,这并不代表一个package内只有一个类。
你可以在同一目录下定义多个属于该package(指代这个目录)的类。
它的意义绝不是简单的“类文件集合容器”,而是一个让各种应该协同工作的类集中到一起的项目包。
值得一提的是,所谓“协同工作”是指至少有一个class要引入其他一些class 来进行功能设计,而这时候采用internal修饰可以省去很多getters和setters。
我自己回忆起在湖南卫视的项目中用AS2开发的 Vplayer,两个类AVCore和AVControl就有很多getter和setter,搞的特别麻烦。
internal类似public,但限定在一个 package内了。
在同一个package 内的类可以访问同一个package内其他类的internal变量,而其他包内的类无法访问。
Flash,AS3.0教程-代码的位置
Flash,AS3.0 教程:代码的位置 篇一:Flash AS3.0 教程:代码的位置 Flash AS3.0 教程:代码的位置 第一*课.件>网 f 早期版本的 ActionScript 代码可以写在帧、 按钮、 影片剪辑、 as 文件等位置, 而 Flash AS3.0 代码的位置发生了重大的改变,只能写在帧及 as 文件中。
虽然 Flash AS3.0 支持把代码写在时间轴中,但在实际应用中,如果把很多的代码放在时 间轴中,会导致代码很难管理。
或者说,用类来组织大量的代码更为合适,因为类代码都是放 在 as 文件中的。
除了把代码放在时间轴上,还可以把代码放在外部文件中,比如,放在服务器的 txt 文件 中,然后把这些外部数据加载到 fla 文件里。
外部文件代码 以往都是在时间轴上写代码,编写的程序一般只有多层一帧的特点,其中最顶层专门来 放置代码。
在这种模式中,假如程序比较大,需要几百行代码来实现,甚至更多,代码全部放 在同一个地方,光是查看就很不方便,需要打开 Flash 软件,然后找到帧及动作面板,最后进 行翻页查看代码。
实际上,对于一个代码较多的程序,可以把代码分成几个大的功能模块,每个模块代码 放在一个 as 文件中,这样不管是查看还是进行其他的管理都较方便。
除了使用 Flash IDE ,可用记事本来编写代码,这样速度更快,写完代码后把扩展名改为 as 可以达到同样的效果,如果不是很熟悉编程,还是使用 Flash 自带的编辑器编写为好,可以 使用代码提示。
下面通过一个例子来了解如何编写 as 文件中的代码,如何把 as 文件中的代 码导入到时间轴中。
例:(代码与美工的分离) 1、打开 Flash,选择【新建】命令,在弹出的【新建文档】对话框中选 ActionScript 文 件,单击确定按钮,新建一个 as 文件,保存名为“shift.as”。
2、在 as 文件中输入代码,代码的编写方法与在时间轴上是一样的: this.addEventListener(Event.ENTER_FRAME , onEnterframe) var shift : Number = 0 var startX = 200 var startY = 200 var r = 60 graphics.lineStyle(0) graphics.moveTo(startX + r , startY) 1 function onEnterframe(evt: Event) { graphics.lineTo(startX + r * Math.cos(shift),startY + r * Math.sin(shift)) 1 / 15ball.x = startX + r * Math.cos(shift) ball.y = startY + r * Math.sin(shift) shift += 15 } 3、新建一个 Flash 文件,保存名为“Sample”,保存在与“shift.as”,文件相同的目录中, 4、 按 Ctrl+F8 创建一个影片剪辑元件, 选椭圆工具, 笔触无,填充色红色, 画一个小球。
【VIP专享】Flash AS3.0 数组应用
3 理解数组[学习笔记] 数组:也叫索引数组。 索引数组是一个对象,其属性由表示该属性在数组中位置的数字来标识。此数字称为索引。所有索引 数组都从零开始,这意味着数组中的第一个元素为 [0],第二个元素为 [1],依此类推。
4 创建数组[学习笔记] 若要创建一个 Array 对象,请使用构造函数 new Array()。如: var myNumber:Array = new Array(1,2,3,4,5);
原因是它可用于表示表中的数据。
8 数组应用 1[学习笔记] 创建一个长度为 0 的空数组 var myArr:Array = new Array();
9 数组应用 2[学习笔记] 创建一个长度为 10 的数组,0 索引为字符串"张志晨",并添加新元素--字符串"张景利。 var myArr:Array = new Array(10); myArr[0] = "张志晨"; myArr.push("张景利");
5 访问数组[学习笔记] 访问数组中的元umber[0] = 1;
6 多维数组[学习笔记] 您可以创建一个多维数组。 方法是创建一个索引数组,然后给它的每个元素分配不同的索引数组。这样的数组被视为是多维的,
1
6.培养学生观察、思考、对比及分析综合的能力。过程与方法1.通过观察蚯蚓教的学实难验点,线培形养动观物察和能环力节和动实物验的能主力要;特2征.通。过教对学观方察法到与的教现学象手分段析观与察讨法论、,实对验线法形、动分物组和讨环论节法动教特学征准的备概多括媒,体继课续件培、养活分蚯析蚓、、归硬纳纸、板综、合平的面思玻维璃能、力镊。子情、感烧态杯度、价水值教观1和.通过学理解的蛔1虫.过观适1、察于程3观阅 六蛔寄.内列察读 、虫生出蚯材 让标容生3根常蚓料 学本教活.了 据见身: 生,师的2、解 问的体巩鸟 总看活形作 用蛔 题线的固类 结雌动态业 手虫 自形练与 本雄学、三: 摸对 学动状习人 节蛔生结4、、收 一人 后物和同类 课虫活构请一蚯集 摸体 回并颜步关 重的动、学、蚓鸟 蚯的 答归色学系 点形教生生让在类 蚓危 问纳。习从 并状学理列学平的害 题线蚯四线人 归、意特出四生面体以形蚓、形类 纳大图点常、五观玻存 表及动的鸟请动文 本小引以见引、察璃现 ,预物身类 3学物明 节有言及的、导巩蚯上状 是防的体之生和历 课什根蚯环怎学固蚓和, 干感主是所列环史 学么据蚓节二样生练引牛鸟 燥染要否以举节揭 到不上适动、区回习导皮类 还的特分分蚯动晓 的同节于物让分答。学纸减 是方征节布蚓物起 一,课穴并学蚯课生上少 湿法。?广的教, 些体所居归在生蚓前回运的 润;4泛益学鸟色生纳.靠物完的问答动原 的4蛔,处目类 习和活环.近在成前题蚯的因 ?了虫以。标就 生体的节身其实端并蚓快及 触解寄上知同 物表内特动体结验和总利的慢我 摸蚯生适识人 学有容点物前构并后结用生一国 蚯蚓在于与类 的什,的端中思端线问活样的 蚓人飞技有 基么引进主的的考?形题环吗十 体生行能着 本特出要几变以动,境?大 节活的1密 方征本“特节化下物.让并为珍 近习会形理切 法。课生征有以问的小学引什稀 腹性态解的 。2课物。什游题主.结生出么鸟 面和起结蛔关观题体么戏:要利明蚯?类 处适哪构虫系察:的特的特用确蚓等 ,于些特适。蛔章形殊形征板,这资 是穴疾点于可虫我态结式。书生种料 光居病是寄的们结构,五小物典, 滑生?重生鸟内学构,学、结的型以 还活5要生类部习与.其习巩鸟结的爱 是如原活生结了功颜消固类构线鸟 粗形何因的存构腔能色化练适特形护 糙态预之结的,肠相是系习于点动鸟 ?、防一构现你动适否统。飞都物为结蛔。和状认物应与的行是。主构虫课生却为和”其结的与题、病本理不蛔扁的他构特环以生?8特乐虫形观部特8征境小理三页点观的动位点梳相组等、这;,哪物教相,理适为方引些2鸟,育同师.知应单面导鸟掌类结了;?生识的位学你握日构解2互.。办特生认线益特了通动手征观识形减点它过,抄;察吗动少是们理生报5蛔?物,与的解.参一了虫它和有寄主蛔与份解结们环些生要虫其。蚯构都节已生特对中爱蚓。会动经活征人培鸟与飞物灭相。类养护人吗的绝适这造兴鸟类?主或应节成趣的为要濒的课情关什特临?就危感系么征灭来害教;?;绝学,育,习使。我比学们它生可们理以更解做高养些等成什的良么两好。类卫动生物习。惯根的据重学要生意回义答;的3.情通况过,了给解出蚯课蚓课与题人。类回的答关:系线,形进动行物生和命环科节学动价环值节观动的物教一育、。根教据学蛔重虫点病1.引蛔出虫蛔适虫于这寄种生典生型活的线结形构动和物生。理二特、点设;置2.问蚯题蚓让的学生生活思习考性预和习适。于穴居生活的形态、结构、生理等方面的特征;3.线形动物和环节动物的主要特征。
FlashDevelop AS3 Project教学
FlashDevelop AS3 Project1.安装和运行1.1 FlashDevelop的安装安装必备:.Net Framework 2.0(或更高版本)使用必备:(1)JDK1.5(2)FlexSDK 3.0安装时,建议把第5项Multi Instance Mode选上,以便在使用的时候可以打开多个FlashDevelop1.2 打开FlashDevelop打开软件,我们可以看到一个开始页,这里有一些消息,还提供了一个最新版本可的下载连接。
你还可以新建项目或者打开一个项目2.简单配置2.1 设置FlexSDK路径从菜单选择Tools -> Program Settings...打开设置面板在左边选择AS3Context,在右边Flex SDK Location选项设定好FlexSDK的路径2.2 设置全局包路径从菜单选择Tools-->Global Classpaths...打开面板后,点击Add Classpath按钮来添加外部包的路径在上图所示的路径下,有如下这些文件夹添加好后,在IDE里面就能感应到了,FlashDevelop里面的代码感应能力还是很不错的,让我们来看一下效果3.新建一个AS3 Project点击选择StartPage上的New Project或者右侧面板中的Create a new project选择AS3 Project 设定好项目路径,选上Create directory for project程序会自动为你的项目创建文件夹。
点击OK完成后程序会建立好一个模板形式的项目。
有bin,lib,src三个目录。
bin里面会自动生成一个swf文件和一个html文件,swf文件用于flashplayer的下载,html文件里已经写好了将项目嵌入到网页的所有代码。
Src里自动生成了一个文档类。
新建的空项目大小为28K,如不需要可以把bin目录里的文件都删掉。
右键单击Main.as,你会看到Always Compile被选中了,如果你的文档类不是Main.as,可以通过这个选项来改变从菜单上选择Project-->Properties...打开属性面板在output里可以设定影片版本、大小、帧速率、背景色、发布路径、测试方式在classpaths里设定代码路径,还可以编辑全局包的路径做好基本设定后,我们来测试一下影片。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flash AS3 Base64 网上找到的Base64执行速度都不怎么快,原因是代码对Flash执行机制没有针对性优化。 下面给出优化过的Base64,其中inline 内联的find方法需要3kis.com的flex sdk补丁才难正常编译。
package { import flash.utils.ByteArray; /* * 优化Base64 * 主要优化执行方式,尽量减少调用函数和尽可能不使用循环 * 优化后提升执行速度是原来的10倍 * Directed by kiwiw3 * */ public class MyBase64 {
public static const version:String = "2.0.0"; public static function encode(data:String):String { var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(data);
return encodeByteArray(bytes); }
private static const BASE64_CHARARR:Vector. = new [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47,61];
public static function encodeByteArray(data:ByteArray):String { var output:ByteArray = new ByteArray();
var opbuf0:int; var opbuf1:int; var opbuf2:int; var opbuf3:int;
var dblen:int = 0; var resultlen:uint = data.length; var position:uint = 0; var oplen:uint = 0; while (resultlen > 0) { if (resultlen >= 3) { dblen = 3; resultlen -= 3; }else { dblen = resultlen; resultlen = 0; }
opbuf0 = (data[position] & 0xfc) >> 2; if(dblen>=1) opbuf1 = ((data[position] & 0x03) << 4) | ((data[position + 1]) >> 4); else opbuf1 = 64;
if(dblen>=2) opbuf2 = ((data[position + 1] & 0x0f) << 2) | ((data[position + 2]) >> 6); else opbuf2 = 64;
if(dblen>=3) opbuf3 = data[position + 2] & 0x3f; else opbuf3 = 64;
output[oplen]= BASE64_CHARARR[opbuf0]; output[oplen+1]= BASE64_CHARARR[opbuf1]; output[oplen+2]= BASE64_CHARARR[opbuf2]; output[oplen+3]= BASE64_CHARARR[opbuf3];
position += 3; oplen += 4;
} return output.readUTFBytes(oplen); }
public static function decode(data:String):String { var bytes:ByteArray = decodeToByteArray(data);
return bytes.readUTFBytes(bytes.length); } public static function decodeToByteArray(_data:String):ByteArray { var output:ByteArray = new ByteArray();
var data:ByteArray = new ByteArray(); data.writeUTFBytes(_data);
var databuf0:int; var databuf1:int; var databuf2:int; var databuf3:int;
var resultlen:uint = data.length; var position:uint = 0; var oplen:uint = 0;
while (resultlen>0) { find(databuf0,data[position]); if (resultlen >= 1) { find(databuf1,data[position+ 1]); }
if (resultlen >= 2) { find(databuf2,data[position+ 2]); }
if (resultlen >= 3) { find(databuf3,data[position+3]); }
if (databuf1 != 64) { output[oplen] = (databuf0 << 2) + ((databuf1 & 0x30) >> 4); if (databuf2 != 64) { output[oplen + 1] = ((databuf1 & 0x0f) << 4) + ((databuf2 & 0x3c) >> 2); if (databuf3 != 64) { output[oplen+ 2] = ((databuf2 & 0x03) << 6) + databuf3; } } } position += 4; oplen += 3; resultlen -= 4; } return output; }
public function MyBase64() { throw new Error("Base64 class is static container only"); }
inline function find(retval:int,val:int):void { if (val >= 65 && val<=90) { retval = val-65; }else if (val >= 97 && val<=122) { retval = 26+val-97; }else if (val >= 48 && val<=57) { retval = 52+val-48; }else if (val==43) { retval = 62; }else if (val==47) { retval = 63; }else if (val==61) { retval = 64; } } } }
网上原版如下: package com.kis.utils{
import flash.utils.ByteArray; public class Base64 { private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
public static const version:String = "1.0.0"; public static function encode(data:String):String { // Convert string to ByteArray var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(data);
// Return encoded ByteArray return encodeByteArray(bytes); }
public static function encodeByteArray(data:ByteArray):String { // Initialise output var output:String = "";
// Create data and output buffers var dataBuffer:Array; var outputBuffer:Array = new Array(4);
// Rewind ByteArray data.position = 0;
// while there are still bytes to be processed while (data.bytesAvailable > 0) { // Create new data buffer and populate next 3 bytes from data dataBuffer = new Array(); for (var i:uint = 0; i < 3 && data.bytesAvailable > 0; i++) { dataBuffer[i] = data.readUnsignedByte(); }
// Convert to data buffer Base64 character positions and // store in output buffer outputBuffer[0] = (dataBuffer[0] & 0xfc) >> 2; outputBuffer[1] = ((dataBuffer[0] & 0x03) << 4) | ((dataBuffer[1]) >> 4); outputBuffer[2] = ((dataBuffer[1] & 0x0f) << 2) | ((dataBuffer[2]) >> 6); outputBuffer[3] = dataBuffer[2] & 0x3f;
// If data buffer was short (i.e not 3 characters) then set // end character indexes in data buffer to index of '=' symbol. // This is necessary because Base64 data is always a multiple of // 4 bytes and is basses with '=' symbols. for (var j:uint = dataBuffer.length; j < 3; j++) { outputBuffer[j + 1] = 64; }