| Package | flash.utils |
| 인터페이스 | public interface IExternalizable |
| 인프리멘타 | ArrayCollection , ObjectProxy |
writeExternal() Methods 및 readExternal() Methods는, object 및 그 super타입의 데이터 스트림의 내용이나 형식의 customize를 가능하게 하기 위해서 클래스에 의해 Implements되고 있습니다. 다만, 클래스명이나 타입은 customize 할 수 없습니다. 개개의 클래스를 직렬화해, 인스턴스 상태를 재구축 할 필요가 있습니다. 이러한 Methods는, 그 상태를 보존하기 위해서 super타입과 대칭이 되어 있을 필요가 있습니다. 이러한 Methods는, AMF (Action Message Format) 직렬화의 동작보다 우선됩니다.
클래스가 IExternalizable 인터페이스를 Implements하지 않고, IExternalizable 인터페이스를 Implements하는 클래스로부터의 Inheritance도 하지 않는 경우는, public 멤버만의 디폴트의 메카니즘을 사용해, 클래스의 인스턴스가 직렬화 됩니다. 따라서, 클래스의 private, internal 및 protected 멤버는 사용할 수 없게 됩니다.
private 멤버를 직렬화하려면 , 클래스에 IExternalizable 인터페이스를 사용할 필요가 있습니다. 예를 들어, 다음의 클래스는, 멤버가 private 멤버이기 (위해)때문에, 직렬화 되지 않습니다.
class Example {
private var one:int;
private var two:int;
}
다만, IExternalizable 인터페이스를 Implements하면, 다음과 같이, 클래스의 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 를 Implements하는 경우, 그 클래스의 인스턴스에는, 디폴트의 직렬화는 적용되지 않습니다. 그 클래스가 Super 클래스로부터 public 멤버를 Inheritance하는 경우, 이러한 멤버도 신중하게 관리할 필요가 있습니다.
IExternalizable 를 Implements하는 클래스의 서브 클래스에 고유의 private 멤버가 포함되어 있는 경우, 그 서브 클래스는, 다음과 같이, IExternalizable 의 Methods를 덧쓰기할 필요가 있습니다.
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;
}
}
See also
| Methods | 정의 | ||
|---|---|---|---|
| readExternal (input:IDataInput ):void
이 Methods는, IDataInput 인터페이스의 Methods를 호출해 데이터 스트림으로부터 디코드할 수 있도록(듯이), 클래스에서 Implements되고 있습니다.
| IExternalizable | ||
| writeExternal (output:IDataOutput ):void
이 Methods는, IDataOutput 인터페이스의 Methods를 호출해 그것 자신을 데이터 스트림에 encode 할 수 있도록(듯이), 클래스에서 Implements되고 있습니다.
| IExternalizable | ||
| readExternal | () | Methods |
public function readExternal(input:IDataInput ):void
이 Methods는, IDataInput 인터페이스의 Methods를 호출해 데이터 스트림으로부터 디코드할 수 있도록(듯이), 클래스에서 Implements되고 있습니다. 이 Methods에서는,writeExternal() Methods로 기입해졌을 때와 같은 순차 순서 및 타입으로, 값을 읽어낼 필요가 있습니다.
input:IDataInput — IDataInput 인터페이스를 Implements하는 클래스의 이름입니다.
|
| writeExternal | () | Methods |
public function writeExternal(output:IDataOutput ):void 이 Methods는, IDataOutput 인터페이스의 Methods를 호출해 그것 자신을 데이터 스트림에 encode 할 수 있도록(듯이), 클래스에서 Implements되고 있습니다.
Parametersoutput:IDataOutput — IDataOutput 인터페이스를 Implements하는 클래스의 이름입니다.
|
코멘트가 추가되었을 경우, 메일로 받기. | 코멘트 리포트
현재의 페이지: http://flexdocs.kr/docs/flex2/langref/flash/utils/IExternalizable.html