Главная / Action Script 3
Пакетflash.utils
Интерфейс public interface IExternalizable

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Интерфейс IExternalizable обеспечивает управление сериализацией класса по мере его шифрования в поток данных. Методы 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;
      }
 }
 

См. также

flash.net.ObjectEncoding


Общедоступные методы
 МетодОпределено
  
Путем реализации данного метода класс расшифровывает сам себя из потока данных с помощью методов интерфейса IDataInput.
IExternalizable
  
Путем реализации данного метода класс шифрует сам себя для потока данных с помощью методов интерфейса IDataOutput.
IExternalizable
Сведения о методе
readExternal()метод
public function readExternal(input:IDataInput):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Путем реализации данного метода класс расшифровывает сам себя из потока данных с помощью методов интерфейса IDataInput. Этот метод должен считывать значения в той же последовательности и с теми же типами, как было записано методом writeExternal().

Параметры

input:IDataInput — Имя класса, в котором реализован интерфейс IDataInput.

writeExternal()метод 
public function writeExternal(output:IDataOutput):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Путем реализации данного метода класс шифрует сам себя для потока данных с помощью методов интерфейса IDataOutput.

Параметры

output:IDataOutput — Имя класса, в котором реализован интерфейс IDataOutput.