| 包 | flash.utils |
| 接口 | public interface IExternalizable |
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
writeExternal() 和 readExternal() 方法是由一个类实现的,以便允许为对象及其超类型自定义数据流的内容和格式(但不是类名或类型)。 每个单独的类都必须序列化并重新构建其实例的状态。 这些方法必须与超类型相称才能保存其状态。 这些方法取代了本机的 Action Message Format (AMF) 序列化行为。
如果某个类既没有实现 IExternalizable 接口,也没有从实现该接口的类继承,则将仅使用公共成员的默认机制对该类的实例进行序列化。 因此,类的私有成员、内部成员和受保护的成员将不可用。
若要序列化私有成员,类必须使用 IExternalizable 接口。 例如,以下类将不会序列化其任何成员,因为这些成员都是私有成员:
class Example {
private var one:int;
private var two:int;
}
但是,如果实现了 IExternalizable 接口,则可以将类的私有成员写入数据流或从数据流中读取类的私有成员,如下所示:
class Example implement IExternalizable {
private var one:int;
private var two:int;
public function writeExternal(output:IDataOutput) {
output.writeInt(one);
output.writeInt(two);
}
public function readExternal(input:IDataInput) {
one = input.readInt();
two = input.readInt();
}
}
注意:如果某个类实现了 IExternalizable,则默认序列化不再适用于该类的实例。 如果该类从超类继承公共成员,还必须小心地管理这些成员。
如果实现 IExternalizable 的某个类的子类有自己的私有成员,则该子类必须覆盖 IExternalizable 的方法,如下所示:
public class Base implements IExternalizable {
private var one:Boolean;
public function writeExternal(output:IDataOutput):void {
output.writeBoolean(one);
}
public function readExternal(input:IDataInput):void {
one = input.readBoolean();
}
}
public class Example extends Base {
private var one:String;
public override function writeExternal(output:IDataOutput):void {
super.writeExternal(output);
output.writeUTF(one);
}
public override function readExternal(input:IDataInput):void {
super.readExternal(input);
one = input.readUTF();
}
}
在将数据写入数据流之前,也可以使用 IExternalizable 接口来压缩数据。 例如:
class Example implements IExternalizable {
public var one:Boolean;
public var two:Boolean;
public var three:Boolean;
public var four:Boolean;
public var five:Boolean;
public var six:Boolean;
public var seven:Boolean;
public var eight:Boolean;
public function writeExternal(output:IDataOutput) {
var flag:int = 0;
if (one) flag |= 1;
if (two) flag |= 2;
if (three) flag |= 4;
if (four) flag |= 8;
if (five) flag |= 16;
if (six) flag |= 32;
if (seven) flag |= 64;
if (eight) flag |= 128;
output.writeByte(flag);
}
public function readExternal(input:IDataInput) {
var flag:int = input.readByte();
one = (flag & 1) != 0;
two = (flag & 2) != 0;
three = (flag & 4) != 0;
four = (flag & 8) != 0;
five = (flag & 16) != 0;
six = (flag & 32) != 0;
seven = (flag & 64) != 0;
eight = (flag & 128) != 0;
}
}
另请参见
| 方法 | 定义方 | ||
|---|---|---|---|
|
类实现此方法,以便通过调用 IDataInput 接口的方法,将其自身从数据流中解码。
| IExternalizable | ||
|
类实现此方法,以便通过调用 IDataOutput 接口的方法,将其自身编码到数据流中。
| IExternalizable | ||
| readExternal | () | 方法 |
public function readExternal(input:IDataInput):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
类实现此方法,以便通过调用 IDataInput 接口的方法,将其自身从数据流中解码。 此方法必须读取与 writeExternal() 方法所写入值处于同一序列中并且类型相同的值。
参数
input:IDataInput — 实现 IDataInput 接口的类的名称。
|
| writeExternal | () | 方法 |
public function writeExternal(output:IDataOutput):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
类实现此方法,以便通过调用 IDataOutput 接口的方法,将其自身编码到数据流中。
参数
output:IDataOutput — 实现 IDataOutput 接口的类的名称。
|
当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/utils/IExternalizable.html