- 浏览: 332285 次
- 性别:
- 来自: 温州
文章分类
最新评论
-
helloworldlove:
Axis_UNZIP_PATH\Axis-version\we ...
3步把您的java程序转换为webservice -
hcqenjoy:
这个工具能再提供下吗 已经没办法下载了 谢谢
汉化 Flex Builder 3 帮助文档 -
NASa_CJ:
String source = HttpClientExamp ...
利用HttpClient获取网页内容 -
zlsj80:
下载地址无效了,楼主修正一下吧
汉化 Flex Builder 3 帮助文档 -
fykyx521:
下载地址都不能用了,是不过时了
汉化 Flex Builder 3 帮助文档
我们都知道对象序列化的目的是为了对象能够在网络上传输,以便存储对象,这是很有用处的,比如一个在线Flash游戏,玩家玩到一半想明天再玩,这时需要通过对象序列化把游戏数据保存起来,不然关闭浏览器数据就都没了,又要从头开始,当然利用Flash中的LSO也可以进行存储数据,不过是存在客户端上,这样的数据不一定能持久,对象序列化的主要目的是保存到服务器的数据库里,也许有人会问,干嘛不把对象的属性直接保存到数据库,还这么麻烦饶一大圈,这当然可以,但是如果对象的属性非常多,写起来会不会很繁琐呢,不如直接把对象保存起来这样反而跟简便,对象序列化的原理是把对象转换为字符串的形式,因为字符串任何语言都认识都能处理,而对象类型只能是属于特定的语言,比如一个Rectangle实例有width,height,fillColor,lineColor属性,把它转换为字符串格式后:"width=value|height=value|fillColor=value|lineColor=value"。
ActionScript 3本身并没有提供对象序列化的APIs,因为它已经有了flash remoting(AMF协议),AMF协议完成对象的序列化和反序列化,这里我们先不谈AMF,看看如何自定义实现对象的序列化,OReilly.Essential.ActionScript.3.0的作者提供了一系列类和接口来实现对象序列化,我们看看他是如何做的:
定义了一个Serializable接口,只声明一个方法用于对象的序列化:
定义一个实现Serializable接口的Serializer类,用于完成对象
一个继承Serializer的Point类,我们将对Point类实例进行序列化处理:
测试类,输出结果为:y=6,x=5
我们看到已经成功把Point对象变成字符串“y=6,x=5”,我们再来看一个例子:
Shape类,定义了两个属性fillColor,lineColor:
Rectangle类继承Shape,同时实现Serializable接口:
一个类要想能够被序列化,要么实现Serializable接口,要么继承已经实现Serializable接口的类,因为Rectangle类的父类没有实现Serializable接口,所以Rectangle类必须实现Serializable接口,而上面那个Point类的父类已经实现Serializable接口,等于是间接实现了,我们看到Rectangle类的serialize()方法,把Serializer当作序列化工具,对Rectangle对象进行序列化处理, 对于核心类Serializer作者设计的比较巧妙,能同时处理两种情况的序列化。
最后还是要说一下一个小问题,假如序列化后的字符串保存到数据库了,再读取进行反序列化时,该怎么知道这些字符串是什么类的呢??? 我的想法是在序列化时同时保存类名以便为反序列化做准备,拿Point例子来说:
增加一个属性代表类名:
ActionScript 3本身并没有提供对象序列化的APIs,因为它已经有了flash remoting(AMF协议),AMF协议完成对象的序列化和反序列化,这里我们先不谈AMF,看看如何自定义实现对象的序列化,OReilly.Essential.ActionScript.3.0的作者提供了一系列类和接口来实现对象序列化,我们看看他是如何做的:
定义了一个Serializable接口,只声明一个方法用于对象的序列化:
package serializer
...{
public interface Serializable
...{
function serialize():String;
}
}
...{
public interface Serializable
...{
function serialize():String;
}
}
定义一个实现Serializable接口的Serializer类,用于完成对象
package serializer
...{
public class Serializer implements Serializable
...{
private var serializationVars:Array; //存储对象的属性
private var serializationObj:Serializable; //指向可序列化的对象引用
private var recordSeparator:String; //指定属性之间的分隔符
public function Serializer()...{
setSerializationObj(this);
}
public function setSerializationVars(vars:Array):void...{
serializationVars = vars;
}
public function setSerializationObj(obj:Serializable):void...{
serializationObj = obj;
}
public function setRecordSeparator(rs:String):void...{
recordSeparator = rs;
}
public function serialize():String
...{
var s:String = "";
for (var i:int = serializationVars.length; --i >= 0;)...{
s += serializationVars[i] + "=" + String(serializationObj[serializationVars[i]]);
if(i>0)...{
s += recordSeparator;
}
}
return s;
}
}
}
...{
public class Serializer implements Serializable
...{
private var serializationVars:Array; //存储对象的属性
private var serializationObj:Serializable; //指向可序列化的对象引用
private var recordSeparator:String; //指定属性之间的分隔符
public function Serializer()...{
setSerializationObj(this);
}
public function setSerializationVars(vars:Array):void...{
serializationVars = vars;
}
public function setSerializationObj(obj:Serializable):void...{
serializationObj = obj;
}
public function setRecordSeparator(rs:String):void...{
recordSeparator = rs;
}
public function serialize():String
...{
var s:String = "";
for (var i:int = serializationVars.length; --i >= 0;)...{
s += serializationVars[i] + "=" + String(serializationObj[serializationVars[i]]);
if(i>0)...{
s += recordSeparator;
}
}
return s;
}
}
}
一个继承Serializer的Point类,我们将对Point类实例进行序列化处理:
package serializer
...{
public class Point extends Serializer
...{
public var x:Number;
public var y:Number;
public var name:String = "Point";
public function Point(x:Number,y:Number)
...{
super();
setRecordSeparator(","); //设置分隔符
setSerializationVars(["x","y"]); //序列化x,y属性
this.x = x;
this.y = y;
}
}
}
...{
public class Point extends Serializer
...{
public var x:Number;
public var y:Number;
public var name:String = "Point";
public function Point(x:Number,y:Number)
...{
super();
setRecordSeparator(","); //设置分隔符
setSerializationVars(["x","y"]); //序列化x,y属性
this.x = x;
this.y = y;
}
}
}
测试类,输出结果为:y=6,x=5
package
...{
import flash.display.Sprite;
import serializer.Point;
import serializer.Rectangle;
import serializer.Rectangle;
public class TestSerialization extends Sprite
...{
public function TestSerialization()
...{
super();
var p:Point = new Point(5,6);
trace(p.serialize());
}
}
}
...{
import flash.display.Sprite;
import serializer.Point;
import serializer.Rectangle;
import serializer.Rectangle;
public class TestSerialization extends Sprite
...{
public function TestSerialization()
...{
super();
var p:Point = new Point(5,6);
trace(p.serialize());
}
}
}
我们看到已经成功把Point对象变成字符串“y=6,x=5”,我们再来看一个例子:
Shape类,定义了两个属性fillColor,lineColor:
package serializer
...{
public class Shape
...{
public var fillColor:uint = 0xFFFFFF;
public var lineColor:uint = 0;
public function Shape(fillColor:uint,lineColor:uint)...{
this.fillColor = fillColor;
this.lineColor = lineColor;
}
}
}
...{
public class Shape
...{
public var fillColor:uint = 0xFFFFFF;
public var lineColor:uint = 0;
public function Shape(fillColor:uint,lineColor:uint)...{
this.fillColor = fillColor;
this.lineColor = lineColor;
}
}
}
Rectangle类继承Shape,同时实现Serializable接口:
package serializer
...{
public class Rectangle extends Shape implements Serializable
...{
public var width:Number = 0;
public var height:Number = 0;
public function Rectangle(fillColor:uint, lineColor:uint)
...{
super(fillColor, lineColor);
}
public function setSize(w:Number,h:Number):void...{
width = w;
height = h;
}
public function getArea():Number...{
return width*height;
}
public function serialize():String
...{
var ser:Serializer = new Serializer();
ser.setRecordSeparator("|");
ser.setSerializationVars(["height","width","fillColor","lineColor"]);
ser.setSerializationObj(this);
return ser.serialize();
}
}
}
...{
public class Rectangle extends Shape implements Serializable
...{
public var width:Number = 0;
public var height:Number = 0;
public function Rectangle(fillColor:uint, lineColor:uint)
...{
super(fillColor, lineColor);
}
public function setSize(w:Number,h:Number):void...{
width = w;
height = h;
}
public function getArea():Number...{
return width*height;
}
public function serialize():String
...{
var ser:Serializer = new Serializer();
ser.setRecordSeparator("|");
ser.setSerializationVars(["height","width","fillColor","lineColor"]);
ser.setSerializationObj(this);
return ser.serialize();
}
}
}
一个类要想能够被序列化,要么实现Serializable接口,要么继承已经实现Serializable接口的类,因为Rectangle类的父类没有实现Serializable接口,所以Rectangle类必须实现Serializable接口,而上面那个Point类的父类已经实现Serializable接口,等于是间接实现了,我们看到Rectangle类的serialize()方法,把Serializer当作序列化工具,对Rectangle对象进行序列化处理, 对于核心类Serializer作者设计的比较巧妙,能同时处理两种情况的序列化。
最后还是要说一下一个小问题,假如序列化后的字符串保存到数据库了,再读取进行反序列化时,该怎么知道这些字符串是什么类的呢??? 我的想法是在序列化时同时保存类名以便为反序列化做准备,拿Point例子来说:
增加一个属性代表类名:
package serializer
...{
public class Point extends Serializer
...{
http://images.csdn.net/syntaxh
...{
public class Point extends Serializer
...{
http://images.csdn.net/syntaxh
发表评论
-
使用 Macromedia Flex 开发 Web 服务客户端
2006-03-31 22:24 834引言 开放式标准被企业用作降低高整合及维护费用的主要手段。现实 ... -
Flex2 发现之旅:构建多语言本地化Flex应用
2006-04-14 14:30 1030创建过Java多语言本地化 ... -
自定义flex组件
2006-04-15 13:52 860我们在ActionScript里定义如下一个自定义MyButt ... -
构建富 Internet 应用程序
2006-07-18 18:09 1033... -
RIA framework - Cairngorm 2 淺析
2006-07-31 12:46 976隨者 Itereation::Two被併入 Adobe 成為 ... -
使用OPENAMF讓JAVA跟FLASH做溝通(Flash Remoting範例)
2006-12-27 14:18 1082這個範例使用 OpenAmf 1.0 openamf-1.0R ... -
OpenAMF 配置文件 详解
2006-12-30 22:56 988OpenAMF openamf-config.xml 配 ... -
关于flash.net.Socket的例子
2006-12-30 23:05 1449前两天看到http://www.ifbin ... -
OpenAMF - 自訂類別轉換對照
2006-12-30 23:08 748要看這篇文章,先要對Remoting有些概念 Remoting ... -
ActionScript 3 Cookbook 简体中文版 (已公布)
2007-01-17 00:05 1099ActionScript 3 Cookbook 中文版 P ... -
ActionScript 3 中的可变长数组
2007-08-24 14:33 899有时候我们可能不能确定数组的长度,在Actio ... -
Flex程序的全屏幕显示
2007-08-24 21:23 2740看到官方的一片讲解如何在Flash Player 9下全屏幕 ... -
ActionScript 3 中的嵌入方法
2007-08-24 21:56 786ActionScript 3也有嵌入式方法,应该说是嵌入函数, ... -
ActionScript 3 的多态性
2007-08-24 23:38 1275测试一下AS3的多态性,准备四个类:MyShape,MyCir ... -
让Flex程序全屏幕运行
2007-08-30 16:03 1613例子代码如下: <?xml version=&qu ... -
ActionScript 3 中的强制类型转换
2007-09-02 13:26 3132作者:Dreamer 日期:2007-07-2 ... -
AIR应用开发中文指南(BETA2)
2007-09-02 15:40 1442AIR应用开发中文指南(BETA2) 如转载,请注明: 译者 ... -
ActionScript3 制作倒影
2007-09-02 19:21 1093倒影类: package com.flashdev.bi ... -
Flex上传组件
2007-09-02 19:36 1811FileUpload.mxml <?xml ver ... -
ActionScript3 调用 JavaScript
2007-09-02 20:34 984这里我们用最简单的代码来演示如何在AS3代码中调用宿主HTML ...
相关推荐
在Flex中,我们可以使用ActionScript 3.0的内置功能进行序列化和反序列化。例如,`flash.utils.ObjectOutput`和`flash.utils.ObjectInput`接口可用于将数据写入或读出二进制流。这对于持久化数据、跨域通信或者在...
在C#编程语言中,序列化是指将对象的状态转换为可以存储或传输的数据格式的过程,而反序列化则是相反的过程,即将数据恢复为原来的对象状态。在与Flash交互时,C#中的序列化技术扮演了关键角色,尤其是在开发跨平台...
这个"ActionScript3中的JSON编码解码包"可能是一个库或框架,专门用于在AS3环境中处理JSON数据,实现数据的序列化和反序列化。 ActionScript3是Adobe Flash Platform的主要编程语言,常用于开发富互联网应用(RIA)...
Flex 3编程还包括服务端数据的交互,书中会介绍如何使用AMF(Action Message Format)进行数据序列化,以及如何连接到Web服务,如SOAP或RESTful API,实现数据的实时传输。同时,还会涉及状态管理,使应用能根据用户...
3. **类型转换**: FlexJSON库还支持自定义类型转换,以便在序列化和反序列化过程中处理特定的ActionScript类。这可以通过实现`ITypeConverter`接口并注册到`TypeConverter`类中来完成。 4. **忽略属性**: 在某些...
在AS3中,可用于创建复杂的UI组件或动画序列。 10. 适配器模式:将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 11. 组合模式:将对象组合成树形结构以...
在本项目中,"protocol buffer已整合actionscript3输出"意味着Protocol Buffer已经扩展了对ActionScript 3的支持,使得ActionScript 3开发者可以利用Protocol Buffer来处理数据序列化和反序列化的需求。 ...
3. 序列化和反序列化:AMF 3 提供了序列化和反序列化机制,允许对象图在不同的会话中被持久化和恢复。 4. 跨平台支持:AMF 3 支持多种平台,包括 Flash Player、Adobe AIR、Adobe Flex 等。 AMF 3 的应用场景包括:...
在AS3中,对象图可以帮助理解代码在运行时的状态,有助于调试和问题定位。 3. 用例图(Use Case Diagram):用例图描绘了系统与外部用户(或系统)之间的交互。在AS3中,这可以用来定义Flash应用的各种功能,如用户...
首先,ActionScript3的引入是为了提升Flash内容的性能和结构化编程。与早期版本相比,AS3采用了更严格的类型系统和面向对象的编程模型,这使得代码更加高效且易于维护。在这个游戏中,我们可能会看到类的使用,如...
在AS3中,可以使用序列化来实现状态的保存和恢复。 20. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。AS3的事件模型完全符合这一...
8.2.3在FlexBuilder3中进行调试 155 8.3处理ActionScript3.0中的异常 160 8.3.1使用try…catch…finally语句 160 8.3.2throw语句主动抛出异常 162 8.3.3处理异常事件 163 8.4异常类型 163 8.4.1异常对象 164 8.4.2...
3. ByteArray类:在ActionScript 3.0中用于处理二进制数据,是实现对象序列化和反序列化的主要工具之一。它提供了writeObject()和readObject()等方法来执行这些操作。 4. 持久化存储介质:对象被序列化后可以存储在...
AS3提供了ObjectOutput和ObjectInput类,可以将对象转换为二进制数据流,方便在网络中传输,然后再在另一端进行反序列化恢复为原对象。 5. **用户界面设计**:聊天室的用户界面通常包含文本输入框(用于输入消息)...
书中的内容涵盖了ActionScript3.0的基础知识,如变量、函数、类的定义和使用,同时也深入到高级主题,如事件处理、显示对象的层次结构、时间线控制、网络通信、音频和视频处理、数据序列化等。 书中"cookbook"的...
5. **数据序列化与反序列化**:在客户端和服务器之间传输数据时,可能需要将对象转换为字符串(序列化)和从字符串还原对象(反序列化)。了解JSON格式和使用`flash.utils.ObjectProxy`、`flash.utils.ByteArray`等...
标记对象序列化的结束。 #### 严格数组类型(StrictArrayType) 与ECMA数组类似,但仅包含数值类型的键。 #### 日期类型(DateType) 日期类型在AMF0中由Unix时间戳和时区偏移量组成。 #### 长字符串类型...
3. **类与对象**:AS3中的类定义了对象的结构和行为,通过实例化类创建对象。类可以有构造函数、方法和属性。继承、封装和多态是面向对象编程的三大特性,在AS3中都有体现。 4. **事件驱动编程**:AS3采用事件驱动...
2. **数据传输格式**:通常,聊天室会采用JSON或XML等轻量级的数据交换格式,便于解析和序列化消息内容。ActionScript 3.0提供了内置的`JSON`和`XML`对象来处理这两种格式。 3. **事件驱动编程**:ActionScript 3.0...