Пакет | flash.utils |
Интерфейс | public interface IExternalizable |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
writeExternal()
и readExternal()
интерфейса IExternalizable реализуются классом, что позволяет осуществлять настройку содержимого и формата потока данных (но не имя класса или тип) для объекта и его супертипов. Каждый класс должен сериализовать и восстанавливать состояние своих экземпляров. Чтобы состояние можно было сохранять, эти методы должны быть симметричными супертипу. Эти методы заменяют исходное поведение сериализации 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, есть собственные закрытые элементы, в подклассе необходимо переопределить методы этого интерфейса, как указано ниже:
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 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Путем реализации данного метода класс расшифровывает сам себя из потока данных с помощью методов интерфейса IDataInput. Этот метод должен считывать значения в той же последовательности и с теми же типами, как было записано методом writeExternal()
.
Параметры
input:IDataInput — Имя класса, в котором реализован интерфейс IDataInput.
|
writeExternal | () | метод |
public function writeExternal(output:IDataOutput):void
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Путем реализации данного метода класс шифрует сам себя для потока данных с помощью методов интерфейса IDataOutput.
Параметры
output:IDataOutput — Имя класса, в котором реализован интерфейс IDataOutput.
|