| パッケージ | flash.utils |
| Interface | public interface IExternalizable |
| 実装者 | ArrayCollection, ObjectProxy |
writeExternal() メソッドおよび readExternal() メソッドは、オブジェクトおよびそのスーパータイプのデータストリームの内容や形式のカスタマイズを可能にするためにクラスによって実装されています。ただし、クラス名やタイプはカスタマイズできません。個々のクラスを直列化して、インスタンスの状態を再構築する必要があります。これらのメソッドは、その状態を保存するためにスーパータイプと対称になっている必要があります。これらのメソッドは、AMF (Action Message Format) 直列化の動作よりも優先されます。
クラスが IExternalizable インターフェイスを実装せず、IExternalizable インターフェイスを実装するクラスからの継承もしない場合は、public メンバーのみのデフォルトのメカニズムを使用して、クラスのインスタンスが直列化されます。したがって、クラスの private、internal および protected メンバーは使用できなくなります。
private メンバーを直列化するには、クラスに IExternalizable インターフェイスを使用する必要があります。たとえば次のクラスは、メンバーが private メンバーなので直列化されません。
class Example {
private var one:int;
private var two:int;
}
ただし、IExternalizable インターフェイスを実装すると、次のように、クラスの private メンバーへの書き込み、およびクラスの private メンバーからの読み取りを行うことができます。
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 を実装する場合、そのクラスのインスタンスには、デフォルトの直列化は適用されません。そのクラスがスーパークラスから public メンバーを継承する場合、これらのメンバーも慎重に管理する必要があります。
IExternalizable を実装するクラスのサブクラスに固有の private メンバーが含まれている場合、そのサブクラスは、次のように、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
このメソッドは、IDataInput インターフェイスのメソッドを呼び出してデータストリームからデコードできるように、クラスで実装されています。このメソッドでは、writeExternal() メソッドで書き込まれたときと同じシーケンスおよびタイプで、値を読み出す必要があります。
パラメータ
input:IDataInput — IDataInput インターフェイスを実装するクラスの名前です。
|
| writeExternal | () | メソッド |
public function writeExternal(output:IDataOutput):voidこのメソッドは、IDataOutput インターフェイスのメソッドを呼び出してそれ自身をデータストリームにエンコードするために、クラスに実装します。
パラメータ
output:IDataOutput — IDataOutput インターフェイスを実装するクラスの名前です。
|
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/utils/IExternalizable.html