AS3代碼
(1) Loader
Loader 類可用於加載 SWF 文件或圖像(JPG、PNG 或 GIF)文件。 使用 load() 方法來啟動加載。 被加載的顯示對象將作為 Loader 對
象的子級添加。
(2) URLLoader
URLLoader 類以文本、二進制數據或 URL 編碼變量的形式從 URL 下載數據。 在下載文本文件、XML 或其它用於動態數據驅動應用程序的
信息時,它很有用。
URLLoader 對象會先從 URL 中下載所有數據,然后才將數據用於 ActionScript。 它會發出有關下載進度的通知,通過 bytesLoaded 和
bytesTotal 屬性以及已調度的事件,可以監視下載進度。
在加載非常大的視頻文件(如 FLV 的視頻文件)時,可能會出現內存不足錯誤。
(3) URLStream
URLStream 類提供對下載 URL 的低級訪問。 數據一下載,便可隨即為應用程序使用,這和使用 URLLoader 時需要等到整個文件下載完不
同。並且 URLStream 類還允許在完成下載前關閉流。 已下載文件的內容將作為原始二進制數據提供。
在 URLStream 中的讀取操作是非阻塞模式的。 這意味着您在讀取數據之前必須使用 bytesAvailable 屬性來確定是否能夠獲得足夠的數據
。 如果不能獲得足夠的數據,將引發 EOFError 異常。
在默認情況下,所有二進制數據都是以 Big-endian 格式編碼的,並且最高位字節於第一位。
整合資料:
(1)Loader
Loader 像2.0中MovieClip 的loadMovie 功能,用於加載外部的圖片和SWF文件。
如果加載圖片文件(jpg,gif,png等)時,Loader.content 得到數據類型是Bitmap 對象;
如果加載SWF文件(flash 9 版本)時,Loader.content 得到數據類型是MovieClip 對象;
如果加載SWF文件(flash 9 以前版本) 時, Loader.content 得到數據類型是AVM1Movie 對象;
(2)URLLoader
(3)URLStream
下面我做了一個實例將被加載的配置文件以二進制數據讀取 ,這可以解決很多問題,比如對不同格式配置文件進行的處理
例如:
AS3代碼
- package
- {
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.net.URLRequest;
- import flash.net.URLStream;
- import flash.net.URLLoader;
- import flash.utils.ByteArray;
- import flash.net.URLLoaderDataFormat;
- /**
- * …
- * @author yangzq
- */
- public class Test extends Sprite
- {
- public function Test()
- {
- //testURLLoader();
- testURLStream();
- }
- private function testURLLoader():void
- {
- var urlLoader:URLLoader = new URLLoader();
- urlLoader.dataFormat = URLLoaderDataFormat.BINARY;//原始二進制數據
- urlLoader.addEventListener(Event.COMPLETE, completeHandler);
- urlLoader.load(new URLRequest(“02.xml”));
- }
- private function completeHandler(event:Event):void
- {
- trace(“配置文件是ANSI :” + event.target.data);// 如果配置文件是ANSI等,會出現中文字亂碼
- //URLLoader如果遇到亂碼,則可以轉換(利用標准的xml格式Excle可以解決亂碼問題就是基於這里):
- var _byteArray:ByteArray = new ByteArray;
- _byteArray.writeBytes(event.target.data);
- _byteArray.position = 0;
- //如果是xml文檔
- var xml:XML = XML(_byteArray.readMultiByte(_byteArray.length, ”chinese”));//簡體中文 (GB2312)
- trace(xml);
- }
- private function testURLStream():void
- {
- var stream:URLStream = new URLStream();
- stream.addEventListener(Event.COMPLETE, complete);
- stream.load(new URLRequest(“02.xml”));
- }
- private function complete (event:Event):void
- {
- var stream:URLStream = event.target as URLStream;
- var xml:XML = XML(stream.readMultiByte(stream.bytesAvailable, ”chinese”));//簡體中文 (GB2312)
- trace(xml);
- }
- }
- }
/////////////////////////////////////////////////////////////////////////////
AS3已經中Loader與URLLoader是兩個比較容易混淆的類,特此區分:
區別:一個用來加載可顯示數據,一個用來加載非顯示數據
因為loader是繼承與容器類的,所以首先它是個容器,而URLLoader 是繼承與EventDispatcher,它不是容器
URLLoader 類以文本、二進制數據或 URL 編碼變量的形式從 URL 下載數據,在加載非常大的視頻文件(如 FLV 的視頻文件)時,可能會出現內存不足錯誤,返回的數據在data屬性里面
而loader多加載圖片,swf等可視化對象,加載后作為唯一的子對象顯示在列表上。
應用范圍
Loader: 多用於swf,圖片(jpg,png,gif)
URLLoader: 多用於文本文件(xml,php,jsp…)
使用方法
Loader:
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); private function loadComplete(event:Event) { trace("done");addChild(loader);}
URLLoader:
xmlLoader.dataFormat=URLLoaderDataFormat.TEXT; xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded); private function xmlLoaded(event:Event) { try {myXML = XML(event.target.data);area.text=myXML;} catch (e:TypeError) {area.text="Load faild:/n"+e.message;} }
Loader
在使用Loader來加載數據時,添加偵聽事件時,注意一定要給Loader的 contentLoaderInfo屬性增加事件,而不是給Loader對象增加事件。
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
大家知道Loader是用來代替原來 MovieClip的loadMovie功能,用於加載外部的圖片文件,SWF文件。
如果加載圖片文件(jpg,gif,png等)時,Loader.content得到數據類型是Bitmap對象;
如果加載SWF文件(flash 9 版本)時,Loader.content得到數據類型是MovieClip對象;
如果加載SWF文件(flash 9 以前版本) 時, Loader.content得到數據類型是AVM1Movie對象;
具體見 http://livedocs.adobe.com/flex/3_cn/langref/flash/display/Loader.html#load ()
當加載操作已開始或套接字已接收到數據時,將調度 ProgressEvent 對象。這些事件通常在將 SWF 文件、圖像或數據加載到應用程序中時生成。有兩種類型的進程事件:ProgressEvent.PROGRESS 和 ProgressEvent.SOCKET_DATA。
ProgressEvent.PROGRESS 64K觸發一次事件。
- actionscript中的urlloader使用
- 2009-03-15 / Read(2) Comments(0) Category:其它技術
- /*@post data to server*/
- private function postData(src:String ,data:String ,callBack:Function):void
- {
- var header1:URLRequestHeader = new URLRequestHeader("Content-Type" ,"application/json;charset=utf-8");
- var header2:URLRequestHeader = new URLRequestHeader("Accept" ,"application/json");
- var request:URLRequest = new URLRequest(src);
- request.data = data;
- request.method = URLRequestMethod.POST;
- request.requestHeaders = [header1 ,header2];
- var loader:urlloader = new urlloader();
- loader.dataFormat = urlloaderDataFormat.TEXT;
- loader.addEventListener(Event.COMPLETE,
- function():void{
- callBack(loader.data);
- });
- loader.load(request);
- }
- /*@get data from server*/
- private function getData(src:String ,callBack:Function):void
- {
- var header1:URLRequestHeader = new URLRequestHeader("Content-Type" ,"application/json;charset=utf-8");
- var header2:URLRequestHeader = new URLRequestHeader("Accept" ,"application/json");
- var request:URLRequest = new URLRequest(src);
- request.method = URLRequestMethod.GET;
- request.requestHeaders = [header1 ,header2];
- var loader:urlloader = new urlloader();
- loader.dataFormat = urlloaderDataFormat.TEXT;
- loader.addEventListener(Event.COMPLETE,
- function():void{
- callBack(loader.data);
- });
- loader.load(request);
- }
