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

as3中通过ByteArray进行对象的深度拷贝

 
阅读更多

今天同事问我有as3中对象深度拷贝的问题

原来还真是没用过,今天google后自己总结下,便于大家参考

as3中通过ByteArray可以进行对象的深度拷贝

import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
import flash.net.*;
import src.*;
function cloneObject(source:Object) :* {
var typeName:String = getQualifiedClassName(source);//获取全名
trace(”输出类的结构”+typeName);
//return;
var packageName:String = typeName.split(”::”)[0];//切出包名
trace(”类的名称”+packageName);
var type:Class = getDefinitionByName(typeName) as Class;//获取Class
trace(type);
registerClassAlias(packageName, type);//注册Class
//复制对象
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return copier.readObject();
}
 

有的人说用复制对象那一段不就可以了吗,但是实际上行不通
对于数组深度复制来说, 复制对象的后面4句代码就足够了

var a1:Array=[1,2,3];
var a2:Array =cloneObject(a1);
var a3:Array = a1;
a1.push(”youmila”);
trace(”a1:”+a1+”a2:”+a2+”a3″+a3);
 

但是对于对象来说肯定不行

用列子测试下
src.youmila.as 代码:

package src{
public class youmila{
private var $_name:String =”youmila”;
private var $_num:Number =0;
public function youmila():void{
trace($_name);
}
public function secondFunc():void{
$_num++;
trace(”this a called function $_num::”+$_num);
}
}
}
 

yapollo.as 代码:

package {
public class yapollo{
private var $_name:String =”yapollo”;
public var $_num:Number =0;
public function yapollo():void{
trace($_name);
}
public function secondFunc():void{
$_num++;
trace(”this a called function $_num::”+$_num);
}
}
}
 

测试实例

var uml1:youmila = new youmila();
var uml2 = cloneObject(uml1);
trace(”类型”+getQualifiedClassName(uml2)); 
输出结果:

youmila
类型Object 
原来的对象类型丢失了,所以对于对象而言,四行不够,必须
用registerClassAlias来保存类的别名,以用于丢失后恢复类的类型
测试实例

var uml1:youmila = new youmila();
var uml2 = cloneObject(uml1);
trace(”类型”+getQualifiedClassName(uml2));
var apollo:yapollo = new yapollo();
apollo.secondFunc();
var apollo2 = cloneObject(apollo);
trace(”第一次输出复制对象的$_num值”+apollo2.$_num);
trace(”类型”+getQualifiedClassName(apollo2));
apollo2.secondFunc();
trace(”第二次输出复制对象的$_num值”+apollo2.$_num);
 

输出结果:

youmila
输出类的结构src::youmila
类的名称src
[class youmila]
youmila
类型src::youmila
yapollo
this a called function $_num::1
输出类的结构yapollo
类的名称yapollo
[class yapollo]
yapollo
第一次输出复制对象的$_num值1
类型yapollo
this a called function $_num::2
第二次输出复制对象的$_num值2 

分享到:
评论

相关推荐

    通过ByteArray来播放MP3

    ### 通过ByteArray播放MP3的方法解析 在Adobe Flash平台中,使用`ByteArray`来加载并播放MP3文件是一项常见的需求,尤其是在需要动态加载音频资源的应用场景下。本文将详细介绍如何利用ActionScript 3 (AS3) 语言...

    flex byteArray to sound

    3. **Sound**: AS3中的一个类,表示声音对象,可以加载、播放和控制音频。 4. **MP3**: 常见的音频压缩格式,广泛用于网络音频传输。 在Flex中,我们可以使用以下步骤将ByteArray转换为Sound: **步骤1:创建Sound...

    flash actionscript3 as3 字符编码转换代码.zip

    综上所述,这个压缩包文件主要涵盖了AS3中与字符编码转换相关的知识,包括`ByteArray`对象的`writeMultiByte()` 和 `readMultiByte()` 方法,以及AS3中的字符串默认使用UTF-16编码,Socket通信中默认使用UTF-8编码等...

    FLASH AS3 SOCKET收发16进制示例

    在AS3中,我们通常使用String或ByteArray对象来处理16进制数据。`HEXtoString as3.as`这个文件可能包含一个函数,用于将16进制字符串转换为ByteArray,以便于Socket通信。 在AS3中,使用Socket类的步骤如下: 1. *...

    as3corelib-.92.1.zip_ as3corelib_as3corelib_as3corelib 92_as3co

    通过`JSON.parse()`方法,你可以将一个JSON格式的字符串转换为AS3的对象结构,而`JSON.stringify()`则可以将AS3对象转换为JSON字符串,方便数据在网络间的传输。例如: ```actionscript var jsonString = '{"name":...

    解决AS3读入中文乱码问题

    在 AS3 中读取 ANSI 文本时,经常会出现中文乱码的问题。这是因为 AS3 在读取 ANSI 文本时,默认使用的编码方式是 System.useCodePage=false,这导致了中文乱码的问题。为了解决这个问题,我们可以使用 ByteArray ...

    AS3中的PNG编码—用FLASH生成PNG

    这个类并不内置于标准的AS3库中,但可以通过第三方库,如Zamzar或AS3CoreLib来获取。这些库提供了一个`encode()`方法,用于将BitmapData对象转换为PNG数据。 AS3CoreLib是一个流行的ActionScript库,包含许多实用...

    renlianshibie.rar_FlashAS3人脸识别_as3_as3 人脸_flash as3_flash人脸

    标题中的“renlianshibie.rar_FlashAS3人脸识别_as3_as3 人脸_flash as3_flash人脸”揭示了我们讨论的主题是关于使用Flash AS3实现的人脸识别技术。这一技术结合了ActionScript 3(AS3)编程语言与OpenCV库中的Haar...

    AS3 录音保存为文件

    在ActionScript 3 (AS3)中,录音并保存为文件是一个涉及音频处理和文件I/O操作的过程。本文将深入探讨如何使用AS3实现这一功能,主要包括以下知识点: 1. **麦克风访问**:在AS3中,可以使用`Microphone`类来获取...

    AS3的一些压缩解压缩类库(AS3 ZIP、AS3 GZIP等等)

    AS3 ZIP和AS3 GZIP是两个常用的类库,它们允许开发者在Flash环境中对数据进行压缩和解压缩,从而优化文件传输和存储效率。下面我们将详细探讨这两个类库及其在实际应用中的用法。 首先,我们来看`ZipArchive`,这是...

    as3拍照程序

    AS3拍照程序是一种基于Adobe Flash CS6开发的交互式应用程序,它允许用户通过网页或桌面应用进行模拟拍照体验。ActionScript 3(AS3)是Flash平台的核心编程语言,为这个程序提供了强大的功能和灵活性。 在AS3中,...

    flash as3 调用摄像头 保存为jpg 含源码

    在本文中,我们将深入探讨如何使用ActionScript 3(AS3)在Flash环境中调用摄像头并保存捕获的图像为JPEG格式。ActionScript是Adobe Flash Professional和Flash Builder中用于创建交互式内容的主要编程语言,而AS3是...

    AS3动态加载字体

    在ActionScript 3 (AS3)中,动态加载字体是一种技术,允许开发者在应用程序运行时加载和使用新的字体。这可以极大地提高应用的灵活性,尤其是对于那些需要展示各种独特字体或者用户可定制字体的应用。本知识点将深入...

    利用AS3来读取MP3的ID3档案资料

    在本文中,我们将深入探讨如何使用ActionScript 3 (AS3) 来读取MP3文件中的ID3元数据。ID3是音频文件格式,尤其是MP3文件中用于存储歌曲信息的标准,包括艺术家名、歌曲标题、专辑名、歌词等。AS3是Adobe Flex和...

    as3_Socket_的简单实例

    在AS3中使用`Socket`,首先要导入`flash.net.Socket`和`flash.utils.ByteArray`这两个类。`Socket`类用于建立和管理TCP连接,而`ByteArray`则用于读写二进制数据,这是TCP通信的基础。 创建Socket连接的基本步骤...

    Flex 与 Struts2 ByteArray 数据上传

    标题中的“Flex 与 Struts2 ByteArray 数据上传”指的是在Web开发中,使用Adobe Flex作为前端客户端,通过Struts2框架在后端处理字节数组(ByteArray)数据的上传技术。Flex是一种基于Adobe Flash Player或Adobe AIR...

    AS3 PNG图片转二进制

    在AS3(ActionScript 3)中,将PNG图片转换为二进制数据是一种常见的优化图像加载和显示的方法。这主要是因为二进制数据能够更有效地处理和传输,特别是对于大量图片的应用,如游戏或者多媒体项目。以下是关于这个...

    java 加密解密压缩包zip代码-as3

    收到服务器返回的加密或解密后的ZIP数据后,可以使用AS3的`ByteArray`类进行进一步处理,如保存到本地或展示给用户。 为了提高安全性,还可以考虑使用HTTPS协议进行通信,以保护数据在传输过程中的安全。同时,密钥...

    AS3 实现发邮件

    5. **编码和解码**:由于SMTP协议通常要求数据使用Base64编码,所以你可能需要使用AS3的` flash.utils.ByteArray`类进行编码和解码。 6. **错误处理**:SMTP服务器可能会返回各种错误代码,我们需要正确地处理这些...

    ByteArray-Scale-Bitmap.rar_ByteArray_slice

    5. **ByteArray到Bitmap转换**:最后,将组合后的Bitmap再转换回ByteArray,以便后续使用,或者可以直接在内存中进行渲染。 这种方法的优点在于,由于只处理和显示需要的部分,可以显著减少内存占用,提高性能。...

Global site tag (gtag.js) - Google Analytics