(轉)Loader ,URLLoader ,URLStream的區別


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代碼   

[c-sharp]  view plain copy print ?
 
  1. package          
  2. {         
  3.     import flash.display.Sprite;         
  4.     import flash.events.Event;         
  5.     import flash.net.URLRequest;         
  6.     import flash.net.URLStream;         
  7.              
  8.     import flash.net.URLLoader;         
  9.     import flash.utils.ByteArray;         
  10.     import flash.net.URLLoaderDataFormat;         
  11.     /**      
  12.      * …      
  13.      * @author yangzq 
  14.      */        
  15.     public class Test extends Sprite        
  16.     {         
  17.                  
  18.         public function Test()          
  19.         {         
  20.                      
  21.             //testURLLoader();         
  22.             testURLStream();         
  23.         }         
  24.                  
  25.         private function testURLLoader():void        
  26.         {         
  27.             var urlLoader:URLLoader = new URLLoader();         
  28.             urlLoader.dataFormat = URLLoaderDataFormat.BINARY;//原始二進制數據         
  29.             urlLoader.addEventListener(Event.COMPLETE, completeHandler);         
  30.                      
  31.             urlLoader.load(new URLRequest(“02.xml”));         
  32.         }         
  33.         private function completeHandler(event:Event):void        
  34.         {         
  35.                      
  36.             trace(“配置文件是ANSI  :” + event.target.data);// 如果配置文件是ANSI等,會出現中文字亂碼         
  37.                      
  38.             //URLLoader如果遇到亂碼,則可以轉換(利用標准的xml格式Excle可以解決亂碼問題就是基於這里):         
  39.             var _byteArray:ByteArray = new ByteArray;         
  40.             _byteArray.writeBytes(event.target.data);         
  41.             _byteArray.position = 0;            
  42.                      
  43.             //如果是xml文檔         
  44.             var xml:XML = XML(_byteArray.readMultiByte(_byteArray.length, ”chinese”));//簡體中文 (GB2312)         
  45.             trace(xml);         
  46.         }         
  47.                  
  48.                  
  49.         private function testURLStream():void        
  50.         {         
  51.             var stream:URLStream = new URLStream();         
  52.                      
  53.             stream.addEventListener(Event.COMPLETE, complete);         
  54.             stream.load(new URLRequest(“02.xml”));         
  55.         }         
  56.                  
  57.         private function complete (event:Event):void        
  58.         {         
  59.             var stream:URLStream = event.target as URLStream;         
  60.             var xml:XML = XML(stream.readMultiByte(stream.bytesAvailable, ”chinese”));//簡體中文 (GB2312)         
  61.                      
  62.             trace(xml);         
  63.         }         
  64.                  
  65.                  
  66.     }         
  67.              
  68. }  

 

 

/////////////////////////////////////////////////////////////////////////////

 

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觸發一次事件。

 

[c-sharp]  view plain copy print ?
 
  1. actionscript中的urlloader使用       
  2. 2009-03-15 / Read(2)  Comments(0)  Category:其它技術       
  3. /*@post data to server*/       
  4. private function postData(src:String ,data:String ,callBack:Function):void       
  5. {       
  6.     var header1:URLRequestHeader = new URLRequestHeader("Content-Type" ,"application/json;charset=utf-8");       
  7.     var header2:URLRequestHeader = new URLRequestHeader("Accept" ,"application/json");       
  8.     var request:URLRequest = new URLRequest(src);       
  9.     request.data = data;       
  10.     request.method = URLRequestMethod.POST;       
  11.     request.requestHeaders = [header1 ,header2];       
  12.            
  13.     var loader:urlloader = new urlloader();       
  14.     loader.dataFormat = urlloaderDataFormat.TEXT;       
  15.     loader.addEventListener(Event.COMPLETE,       
  16.     function():void{       
  17.         callBack(loader.data);         
  18.     });       
  19.     loader.load(request);       
  20.            
  21. }       
  22. /*@get data from server*/       
  23. private function getData(src:String ,callBack:Function):void       
  24. {       
  25.     var header1:URLRequestHeader = new URLRequestHeader("Content-Type" ,"application/json;charset=utf-8");       
  26.     var header2:URLRequestHeader = new URLRequestHeader("Accept" ,"application/json");       
  27.     var request:URLRequest = new URLRequest(src);       
  28.     request.method = URLRequestMethod.GET;       
  29.     request.requestHeaders = [header1 ,header2];       
  30.            
  31.     var loader:urlloader = new urlloader();       
  32.     loader.dataFormat = urlloaderDataFormat.TEXT;       
  33.     loader.addEventListener(Event.COMPLETE,       
  34.     function():void{       
  35.         callBack(loader.data);         
  36.     });       
  37.     loader.load(request);       
  38.            
  39. }     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM