Pacchettoflash.utils
Interfacciapublic interface IExternalizable

Versione linguaggio: ActionScript 3.0
Versione lettore: Flash Player 9

L'interfaccia IExternalizable consente di controllare la serializzazione di una classe durante la codifica all'interno di un flusso di dati. I metodi writeExternal() e readExternal() dell'interfaccia IExternalizable vengono implementati da una classe per personalizzare il contenuto e il formato del flusso di dati (ma non il nome di classe o il tipo) per un oggetto e i relativi supertipi. Ogni singola classe deve serializzare e ricostruire lo stato delle proprie istanze. Questi metodi devono essere simmetrici rispetto al supertipo per salvarne lo stato. Questi metodi sostituiscono il comportamento di serializzazione nativo AMF (Action Message Format).

Se una classe non implementa (o eredita da una classe che implementa) l'interfaccia IExternalizable, l'istanza della classe viene serializzata soltanto mediante il meccanismo predefinito dei membri pubblici. Di conseguenza, i membri privati, interni e protetti di una classe non sono disponibili.

Per serializzare i membri privati, è necessario che la classe utilizzi l'interfaccia IExternalizable. Ad esempio, la classe seguente non serializza nessuno dei propri membri perché sono privati:

 class Example {
 
       private var one:int;
       private var two:int;
 }
 

Tuttavia, se non si implementa l'interfaccia IExternalizable, è possibile scrivere sul (e leggere dal) flusso di dati dei membri privati della classe, come descritto di seguito:

 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();
       }
 }
 

Nota: se una classe implementa IExternalizable, la serializzazione predefinita non viene più applicata alle istanze di tale classe. Se questa classe eredita membri pubblici da una superclasse, è necessario gestire con attenzione anche tali membri.

Quando una sottoclasse di una classe che implementa IExternalizable possiede membri privati propri, la sottoclasse deve sovrascrivere i metodi di IExternalizable, come descritto di seguito:

 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();
      }
 }
 

L'interfaccia IExternalizable può anche essere utilizzata per comprimere i dati prima di scriverli su un flusso di dati. Ad esempio:

 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;
      }
 }
 

Vedere anche

flash.net.ObjectEncoding


Metodi pubblici
 MetodoDefinito da
  
Una classe implementa questo metodo per decodificarsi da un flusso di dati chiamando i metodi dell'interfaccia IDataInput.
IExternalizable
  
Una classe implementa questo metodo per codificarsi per un flusso di dati chiamando i metodi dell'interfaccia IDataOutput.
IExternalizable
Descrizione dei metodi
readExternal()metodo
public function readExternal(input:IDataInput):void

Versione linguaggio: ActionScript 3.0
Versione lettore: Flash Player 9

Una classe implementa questo metodo per decodificarsi da un flusso di dati chiamando i metodi dell'interfaccia IDataInput. Questo metodo deve leggere i valori nella stessa sequenza e con gli stessi tipi scritti dal metodo writeExternal().

Parametri

input:IDataInput — Il nome della classe che implementa l'interfaccia IDataInput.

writeExternal()metodo 
public function writeExternal(output:IDataOutput):void

Versione linguaggio: ActionScript 3.0
Versione lettore: Flash Player 9

Una classe implementa questo metodo per codificarsi per un flusso di dati chiamando i metodi dell'interfaccia IDataOutput.

Parametri

output:IDataOutput — Il nome della classe che implementa l'interfaccia IDataOutput.





 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/ActionScriptLangRefV3/flash/utils/IExternalizable.html