Flash / Flex / ActionScript/Development/ByteArray

Материал из Web эксперт
Перейти к: навигация, поиск

By default, private properties are not written when an object is serialized

   <source lang="java">

package {

   import flash.display.Sprite;
   import flash.net.*;
   import flash.utils.ByteArray;
   public class CustomTypeExample extends Sprite {
       public function CustomTypeExample() {
           registerClassAlias("ExampleType", ExampleType);
           var example1:ExampleType = new ExampleType(1, 2);
           var byteArray:ByteArray = new ByteArray();
           byteArray.writeObject(example1);
           byteArray.position = 0;
           var example2:ExampleType = byteArray.readObject() as ExampleType;
           trace(example2.getA());
           trace(example2.getB());
       }
   }

}

   class ExampleType implements flash.utils.IExternalizable {
       private var _a:Number;
       private var _b:Number;
       public function ExampleType(a:Number = -1, b:Number = -1) {
           if(a != -1) {
               _a = a;
           }
           if(b != -1) {
               _b = b;
           }
       }
       public function getA():Number {
           return _a;
       }
       public function getB():Number {
           return _b;
       }
       public function writeExternal(output:flash.utils.IDataOutput):void {
           output.writeFloat(_a);
           output.writeFloat(_b);
       }
       public function readExternal(input:flash.utils.IDataInput):void {
           _a = input.readFloat();
           _b = input.readFloat();
       }
   }
       </source>
   
  


Common Uses of Byte Arrays

   <source lang="java">

package {

   import flash.display.Sprite;
   import flash.utils.ByteArray;
   import flash.media.Sound;
   import flash.media.SoundChannel;
   import flash.media.*;
   import flash.net.URLRequest;
   import flash.events.Event;
   import flash.system.Security;
   public class Main extends Sprite {
       private var _channel:SoundChannel;
       private var _graph:Sprite;
       public function Main() {
       Security.loadPolicyFile("http://wbex.ru/crossdomain.xml");
           var sound:Sound = new Sound();
           sound.load(new URLRequest("http://wbex.ru/Demo.mp3"), new SoundLoaderContext(1000, true));
           _channel = sound.play();
           _graph = new Sprite();
           _graph.y = 200;
           addChild(_graph);
           addEventListener(Event.ENTER_FRAME, enterFrameHandler);
       }
       private function enterFrameHandler(event:Event):void {
           var bytes:ByteArray = new ByteArray();
           SoundMixer.ruputeSpectrum(bytes);
           _graph.graphics.clear();
           _graph.graphics.lineStyle(0, 0, 1);
           var plotX:Number = 0;
           for(var i:Number = 0; i < 256; i++) {
               _graph.graphics.lineTo(plotX, bytes.readFloat() * stage.stageHeight / 2);
               plotX += stage.stageWidth / 256;
           }
       }
   }

}

       </source>
   
  


Creating a Byte Array

   <source lang="java">

package{

 import flash.display.Sprite;
 import flash.utils.ByteArray;  
 public class Main extends Sprite{
   public function Main(){
       var bytes:ByteArray = new ByteArray();
       bytes[0] = 256;
       trace(bytes[0]); // Outputs 0
       
       bytes.writeInt(1);
       trace(bytes[0] + ""+ bytes[1] + ""+ bytes[2] + ""+ bytes[3]);
   }
 }

}

       </source>
   
  


Embedding Files as Binary Data

   <source lang="java">

package {

 import mx.core.ByteArrayAsset;
 [Embed(source="f.swf", mimeType="application/octet-stream")]
 public class FP9BinaryData extends ByteArrayAsset {
 }

}

       </source>
   
  


Embedding XML at compile time

   <source lang="java">

package {

 import flash.display.*;
 import flash.events.*;
 import flash.utils.ByteArray;
 public class EmbedXML extends Sprite {
   [Embed(source="embeds/data.xml", mimeType="application/octet-stream")]
   private var BinaryData:Class;
   public function EmbedXML (  ) {
     var byteArray:ByteArray = new BinaryData(  );
     var data:XML = new XML(byteArray.readUTFBytes(byteArray.length));
     trace(data.toXMLString(  ));
   }
 }

}

       </source>
   
  


Write array to ByteArray

   <source lang="java">

package{

 import flash.display.Sprite;
 import flash.utils.ByteArray;
 public class Main extends Sprite{
   public function Main(){
       var arrayA:Array = new Array("a", "b", "c", "d");
       var byteArray:ByteArray = new ByteArray();
       byteArray.writeObject(arrayA);
       byteArray.position = 0;
       var arrayB:Array = byteArray.readObject() as Array;
       arrayB.push("e", "f", "g", "h");
       trace(arrayA.length); // Outputs 4
       trace(arrayB.length); // Outputs 8
   }
 }

}

       </source>