`
cloud21
  • 浏览: 396449 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

AS3使用ByteArray进行对象深度拷贝

    博客分类:
  • Flex
阅读更多
使用ActionScript3中新提供的ByteArray类(flash.utils.ByteArray)可以创建一个对象的深度拷贝。“深 度”的意思是可以拷贝一个对象(object)的所有引用,这意味着如果你拷贝一个包含对象的数组,那么数组中的对象也被拷贝(而不是引用)。下面是一个 clone方法:

ActionScript代码:

functionclone(source:Object):*{
var copier:ByteArray=newByteArray();
copier.writeObject(source);
copier.position=0;
return(copier.readObject());
}
注意:你需要先导入flash.utils.ByteArray;

要使用这个方法,可以使用下面的代码:

ActionScript代码:

newObjectCopy=clone(originalObject);
虽然这个方法可以深度拷贝你的对象,但是它不会一同拷贝类的类型定义。所以,如果查需要拷贝一个MyClass实例,拷贝出的对象将不在是MyClass类型。这个方法最好在普通对象上使用。

下面是我的一些测试代码:

i
mportflash.utils.ByteArray;
flash.utils.getQualifiedClassName;
var a1:Array=[1,2,3];
var a2:Array=clone(a1);//克隆a1,a2中保存的是a1的复制品,与a1不存在任何关系了
var a3:Array=a1;//由于a1是数组,所以a3是引用a1
a1.push(4);//改变a1的值
trace(a1);//输出1,2,3,4
trace(a2);//输出1,2,3
trace(a3);//输出1,2,3,4
trace("===============");
varaa1:Array=[1,2,3];
varaa2:Array=[11,22,aa1]//aa2中的一个元素是aa1
varaa3:Array=clone(aa2);//克隆aa2,aa3中保存的是aa2的复制品,aa2中的aa1也是复制品
trace(aa1);//输出1,2,3
trace(aa2);//输出11,22,1,2,3
aa1.push(4);//修改aa1的值
trace(aa2);//输出11,22,1,2,3,4
trace(aa3);//输出11,22,1,2,3
trace(getQualifiedClassName(aa2));//输出Array
trace(getQualifiedClassName(aa3));//输出Array,这说明对Array的克隆可以保持克隆结果的Array类型不变
trace("===============");
var aaa1:MyClass=newMyClass();//建立一个自定义类型
var aaa2=clone(aaa1);//克隆自定义类型
trace(aaa2.a);//输出1
trace(getQualifiedClassName(aaa2));//输出Object,这说明aaa2的MyClass类型丢失了
functionclone($source:Object):*
{
var _copier:ByteArray=newByteArray();
_copier.writeObject($source);
_copier.position=0;
return_copier.readObject();
}

MyClass.as的内容

package{
public class MyClass{
public var a:int=1;
public var b:int=2;
public function MyClass(){}
}
}
注意:
不能为aaa2强制转换类型,如果使用下面的语句:

var aaa2=MyClass(clone(aaa1));
则会报错:

TypeError:Error#1034:强制转换类型失败:无法将Object@138c0341转换为MyClass。
atDeepObjectCopieswithByteArray_fla::MainTimeline/DeepObjectCopieswithByteArray_fla::frame1()
如果使用as语句转换,则得到的aaa2值是null。
分享到:
评论

相关推荐

    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编码等...

    通过ByteArray来播放MP3

    1. **创建`ByteArray`对象**: 首先,我们需要创建一个`ByteArray`对象,并使用`URLLoader`来加载MP3文件的数据。 ```actionscript var mp3Data:ByteArray = new ByteArray(); var loader:URLLoader = new ...

    as3corelib-.92.1.zip_ as3corelib_as3corelib_as3corelib 92_as3co

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

    FLASH AS3 SOCKET收发16进制示例

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

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

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

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

    这通常涉及到使用 ByteArray 对象进行数据交换,以及使用StageVideo或Camera类获取视频流。 此外,为了优化性能和用户体验,开发者还需要考虑如何有效地处理检测到的人脸,例如添加追踪功能、进行人脸识别或情绪...

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

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

    大话PKG解包工具

    支持AS3的ByteArray序列化对象的AMF格式编码、解码( readObject、writeObject )。 支持AS3的ByteArray的compress、uncompress压缩算法:DEFLATE、LZIB、LZMA。 支持直接修改AS3的ByteArray字节流内编码的对象。 ...

    AS3 录音保存为文件

    本文将深入探讨如何使用AS3实现这一功能,主要包括以下知识点: 1. **麦克风访问**:在AS3中,可以使用`Microphone`类来获取用户的麦克风输入。首先,创建一个`Microphone`对象并设置其增益,然后通过监听`status`...

    解决AS3读入中文乱码问题

    这是因为 AS3 在读取 ANSI 文本时,默认使用的编码方式是 System.useCodePage=false,这导致了中文乱码的问题。为了解决这个问题,我们可以使用 ByteArray 格式读入 ANSI 文本,并指定字符集来解决中文乱码的问题。 ...

    as3拍照程序

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

    AMF数据分析器_V22

    支持AS3的ByteArray序列化对象的AMF格式编码、解码( readObject、writeObject )。 支持AS3的ByteArray的compress、uncompress压缩算法:DEFLATE、LZIB、LZMA。 支持直接修改AS3的ByteArray字节流内编码的对象。 ...

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

    要使用AS3生成PNG,我们需要了解以下几个关键知识点: 1. **BitmapData对象**:这是AS3中处理像素数据的核心类。你可以通过它创建新的位图,或者从现有的显示对象(如Sprite或MovieClip)获取位图数据。BitmapData...

    AS3 实现发邮件

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

    AS3动态加载字体

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

    as3_Socket_的简单实例

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

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

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

    as3带进度条上传实例

    在Adobe Flex框架下使用ActionScript 3 (AS3) 进行文件上传开发时,加入进度条功能是提升用户体验的关键环节。本篇将详细介绍如何实现一个带有进度条的文件上传功能,包括连接服务器、发送文件以及更新进度条的具体...

    flash as3录音压缩为MP3并上传(不用借助fms)

    在本文中,我们将深入探讨如何使用Flash AS3实现本地录音并将其压缩为MP3格式,然后直接上传到服务器。这个过程不再需要通过FMS(Flash Media Server)进行中转,大大提高了效率。以下是对该技术的详细解释: 1. **...

Global site tag (gtag.js) - Google Analytics