转自:http://xinsync.xju.edu.cn/index.php/archives/1743#more-1743

AS3的效率(注意,我说的是AS3,而不是AVM)直接而言就是对于设计模式及算法的优化和对于对象操作的效率,对于设计模式和算法的优化建立在 对于 AS3程序的架构和细节上的优化,需要应用的架构分析人员和程序员有一定深厚的“内力”。而对于对象本身的操作效率的优化,则是建立在AS3官方的内置类 提供的丰富功能上而言的。今天就讨论一下对于对象操作的效率提升的话题,简单来说,就是讨论基于ByteArray类的操作方法。
从使用 场景上来分析,单纯的存储一个String,Number,Boolean或者是略微复杂一些的XML数据片到内存中(实际上是AS3经过AVM的编译机 制),还比较不出来使用ByteArray的优势。但是一旦使用场景变为一个多人聊天室或者是分析一个服务提供的Heavy XML数据对象时,使用ByteArray的效率就体现出来了。因为ByteArray直接使用AMF来对于数据序列化。AMF,是每个AS开发者都应该 了解的一个协议,官方对于AMF在数据上的压缩功能的解释是可以和zlib相兼容和媲美的。
那么说到底,如何通过ByteArray操作对象,甚至是从内存中深层次的进行对象克隆呢?官方文档上给出的代码是最直观的:

package {
import flash.display.Sprite;
//用ByteArray类一定要Import它,但是不需要指定AMF的Encoding方式了。
import flash.utils.ByteArray;import flash.errors.EOFError;
public class ByteArrayExample extends Sprite {
public function ByteArrayExample() {
var byteArr:ByteArray = new ByteArray();
byteArr.writeBoolean(false);
trace(byteArr.length);             // 1
trace(byteArr[0]);             // 0
byteArr.writeDouble(Math.PI);
trace(byteArr.length);             // 9
//以下trace均是AMF压缩之后的整数位和小数位的值,并非原来的3.1415…
trace(byteArr[0]);             // 0
trace(byteArr[1]);             // 64
trace(byteArr[2]);             // 9
trace(byteArr[3]);             // 33
trace(byteArr[4]);             // 251
trace(byteArr[5]);             // 84
trace(byteArr[6]);             // 68
trace(byteArr[7]);             // 45
trace(byteArr[8]);             // 24
byteArr.position = 0;
try {
trace(byteArr.readBoolean() == false); // true
}
catch(e:EOFError) {
trace(e);            // EOFError: Error #2030: End of file was encountered.
}
try {
//使用ByteArray类的readDouble读取浮点数的方法提取内存中该浮点数,而且自动通过AMF还原数据,相当方便
trace(byteArr.readDouble());         // 3.141592653589793
}
catch(e:EOFError) {
trace(e);            // EOFError: Error #2030: End of file was encountered.
}
try {
trace(byteArr.readDouble());
}
catch(e:EOFError) {
trace(e);             // EOFError: Error #2030: End of file was encountered.
}
}
}
}
上面的代码主要讲解了ByteArray的使用,但是我说了,除了AMF编码进行高效数据操作的功能之外,ByteArray还有一个很酷的功能,就是从内存中深层次的Copy(Clone)整个对象。来看下面的代码:
import flash.utils.ByteArray;//objSource是源对象
function objClone(objSource:Object):*
{
var myCustomCopier:ByteArray = new ByteArray();
myCustomiCopier.writeObject(objSource);
myCustomCopier.position = 0;
return(myCustomCopier.readObject());
}
需要Copy Object时,调用objClone对象:
var myNewObjectCopy=objClone(objSource);
上述的Object拷贝用法总结起来有三个特点:
1.从内存中拷贝数据对象
2.自动使用AMF压缩序列化数据
3.生成的新的数据对象的拷贝,没有原来数据对象的类关联。比如objSource原来是ObjClass的关联,但是myNewObjectCopy则与ObjClass类没有关联。
以上用法很酷吧,大幅度提升Flash应用操作数据的效率和性能,而且,也不要了解AMF内部的工作方式。

使用ByteArray及AMF来提高Data Object的操作效率相关推荐

  1. PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决

    PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决 参考文章: (1)PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决 (2)ht ...

  2. CANopen 7.过程数据对象 PDO Process data object)

    学习:https://blog.csdn.net/iamplane/article/details/49931319 同步报文使用:https://blog.csdn.net/qq_40104597/ ...

  3. JDO(Java Data Object )

    JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要 ...

  4. PHP5中PDO(PHP DATA OBJECT)模块基础详解

    PHP5自从2004年发布以来PDO就有了,但是现在纵观周边开发的情况还是4世代的mysql或者mysqli占据大部分江山,就像ie6一样.也许改革需要时间的推动,在即将发行的PHP6中PDO会作为默 ...

  5. PEGA(Low-Code App Builder)Describing a data object

    Data types 应用程序数据模型中的数据类型 为了处理案例,Pega Platform应用程序使用许多不同的数据类型,这些数据类型是案例数据的集合.数据类型为开发人员提供了一种方法,可以将一组字 ...

  6. php之PDO (PHP DATA OBJECT)

    从 PHP 5.1 开始附带了 PDO,PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库(比如mysq ...

  7. java字典序列化_Java对象序列化,Serialize Java Data Object,音标,读音,翻译,英文例句,英语词典...

    补充资料:对象化 标志人类有目的的对象性活动的过程及其结果的哲学范畴.马克思用这个范畴揭示劳动的实现.劳动物化为对象的事实.劳动的实现意味着创造一定的产品,而劳动的产品就是固定在某个对象中物化为对象的 ...

  8. android 面试 android 知识点 提高篇

    来源:以前网上买的资料+面试遇到的+百度到的 ____本篇为提高篇 一.Android性能优化 1.如何对Android应用进行性能分析 一款App流畅与否安装在自己的真机里,玩几天就能有个大概的感性 ...

  9. 【SDO】Service Data Objects(SDO) 简介

    SDO是为了屏蔽数据格式.数据源的差异性而出现的.新公司用到了SDO并自己做了SDO的实现,作为学习,试着翻译这篇篇IBM 2004年的文章 原文:http://www.ibm.com/develop ...

最新文章

  1. 循环获取结构体中的健名与值的实现
  2. Webwork 学习之路(四)Configuration 详解
  3. WPF Interaction框架简介(一)——Behavior
  4. 关于STM32的IAP与APP互相跳转
  5. Chrome 0 day漏洞利用链
  6. Python 程序打包 -- 使用pyinstaller
  7. 5G给边缘计算带来了什么?
  8. 机器学习降维算法四:Laplacian Eigenmaps 拉普拉斯特征映射
  9. 《数据结构教程》(李春葆 主编)课后习题【练习题6】
  10. 电商智能写作:京东AI闪电智能写作引擎
  11. 计算机基础教学模式,计算机基础行动导向教学模式的应用
  12. 【Ubuntu】deepin安装QQ WeChat
  13. RMAN深入解析之--内存中的RMAN
  14. Excel插件快捷键弹窗事件(VSTO+键盘钩子实现)
  15. 用Python生成马赛克画
  16. camera相机 its_[Android] Camera ITS/CTS Verifier测试
  17. 机器学习(一):什么是机器学习
  18. 七天玩转Redis 第七天打卡 Redis常见面试题及课程总结
  19. jvm系列(十一):JVM演讲PPT分享
  20. JavaScript 实现动物识别专家系统交互演示

热门文章

  1. aws rds监控慢sql_使用AWS CLI部署AWS RDS SQL Server
  2. lombak-插件使用
  3. URL Loading System官方文档翻译一
  4. vue-cli watch简单用法
  5. 多线程蜂鸣器研究,友善之臂Smart210开发版
  6. Linux基础和常用命令
  7. microsoft visual studio遇到了问题,需要关闭
  8. 好玩的问答,看看你的年龄阶段哦
  9. matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
  10. python集合类型运算符_Python 数据类型和运算符