flash加载外部数据:
Loader类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。
URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。
URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为 ActionScript 使用,这和使用 URLLoader 时需要等到整个文件下载完不同。 并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。
如果要加载图片一般使用的是Loader类,但是Loader类有一些不支持的文件比如bmp图片就加载不了。要解决这个问题可以使用URLLoader 类。通过URLLoader以二进制形式加载数据,然后将接收到的数据转换为bmp。 这个例子同样也可以扩张到其他Loader类不支持加载的文件。代码如下:
1 package 2 { 3 import flash.display.MovieClip; 4 import flash.events.Event; 5 import flash.events.IOErrorEvent; 6 import flash.net.URLRequest; 7 import flash.net.URLLoaderDataFormat; 8 import flash.display.BitmapData; 9 import flash.display.Bitmap; 10 import flash.net.URLLoader; 11 import flash.utils.ByteArray; 12 13 public class imageUrlLoadExample extends MovieClip 14 { 15 private var url:String = "http://issue2012.alog.cn/shake/upload/1337853313203-13751741307.bmp"; 16 private var urlLoader:URLLoader; 17 18 public function imageUrlLoadExample() 19 { 20 urlLoader = new URLLoader(); 21 urlLoader.addEventListener(Event.COMPLETE, urlLoaderComplete); 22 urlLoader.addEventListener(IOErrorEvent.IO_ERROR, urlLoaderIOError); 23 urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 24 urlLoader.load(new URLRequest(url)); 25 } 26 27 private function urlLoaderComplete(e:Event):void 28 { 29 var byteArr:ByteArray = ByteArray(urlLoader.data); 30 var bitmapData:BitmapData = new BitmapData(10, 10); 31 bitmapData = BMPEncoder.decode(byteArr); 32 33 var bitmap:Bitmap = new Bitmap(bitmapData); 34 addChild(bitmap); 35 } 36 37 private function urlLoaderIOError(e:IOErrorEvent):void 38 { 39 trace(e); 40 } 41 } 42 }
还有一个比较少用的URLStream 类,此类相对URLLoader类有个很突出的特点,就是可以不用等全部内容下载完的就可以使用。下给出一个例子:
1 package 2 { 3 import flash.display.Loader; 4 import flash.display.MovieClip; 5 import flash.events.IOErrorEvent; 6 import flash.net.URLStream; 7 import flash.net.URLRequest; 8 import flash.events.Event; 9 import flash.events.ProgressEvent; 10 import flash.utils.ByteArray; 11 import flash.utils.getTimer; 12 13 public class urlStreamExample extends MovieClip 14 { 15 private var url:String = "http://www.wohuia.com/files/information/352544/d2a2ca089f0560b6cdc61fef068ebe75.jpg"; 16 private var imageLoad:Loader; 17 private var imageStream:URLStream; 18 19 private var imageData:ByteArray; 20 21 public function urlStreamExample() 22 { 23 imageLoad = new Loader(); 24 imageStream = new URLStream(); 25 imageStream.addEventListener(Event.COMPLETE, imageStreamComplete); 26 imageStream.addEventListener(IOErrorEvent.IO_ERROR, imageStreamIOError); 27 imageStream.addEventListener(ProgressEvent.PROGRESS, imageStreamProgress); 28 startLoad(url); 29 } 30 31 private function startLoad(_url:String):void 32 { 33 if (imageStream.connected) 34 { 35 imageStream.close(); 36 } 37 try 38 { 39 imageStream.load(new URLRequest(_url + "?" + getTimer())); 40 } 41 catch (error:Error) 42 { 43 trace("Unable to load requested document."); 44 } 45 //清除load 46 imageLoad.unload(); 47 imageData = new ByteArray(); 48 imageLoad.scaleX = imageLoad.scaleY = 0.5; 49 addChild(imageLoad); 50 } 51 52 private function imageStreamProgress(e:ProgressEvent):void 53 { 54 if (imageStream.bytesAvailable == 0) 55 { 56 return; 57 } 58 progressData(); 59 } 60 61 private function progressData():void 62 { 63 if (imageStream.connected) 64 { 65 imageStream.readBytes(imageData, imageData.length); 66 trace("imageData" + imageData.bytesAvailable); 67 } 68 imageLoad.unload(); 69 imageLoad.loadBytes(imageData); 70 } 71 private function imageStreamComplete(e:Event):void 72 { 73 trace("imageStream.bytesAvailable" ); 74 } 75 private function imageStreamIOError(e:IOErrorEvent):void { 76 trace(e); 77 78 } 79 } 80 81 }