Flash / Flex / ActionScript/Development/ByteArray
Содержание
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>