loader,URLLoader,URLStream这个三种动态加载资源的具体使用场合,以及区别

1、Loader

Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。

在使用Loader加载数据,添加侦听事件时,一定要给LoadercontentLoaderInfo属性增加事件,而不是给Loader对象增加事件。

Loader侦听事件时,用contentLoaderInfo来侦听:

 1 public function LoderDemo()
 2         {
 3             stage.align = StageAlign.TOP_LEFT;
 4             stage.scaleMode = StageScaleMode.NO_SCALE;
 5             
 6             var loader:Loader = new Loader();
 7             loader.load( new URLRequest( "test.png" ) );
 8             loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError); 
 9             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
10         }

 在加载内容时必须侦听它的IOErrorEvent事件,以防出现加载错误

  必须把加载错误的情况考虑进去,常见的还有Http的请求错误

1 urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
1 protected function onError(event:IOErrorEvent):void
2         {
3             trace(" url not found....")
4         }

 用copyPixels方法来复制图片

protected function onComplete(event:Event):void
        {
            var loaderInfo:LoaderInfo = event.target as LoaderInfo;
            trace( loaderInfo.content );
            trace( loaderInfo.content is Bitmap );
            var bmp:Bitmap = loaderInfo.content as Bitmap;
            //addChild( bmp );
            var bd:BitmapData = bmp.bitmapData;
            var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 );
            newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() );
            var newBmp:Bitmap = new Bitmap( newBD );
            addChild( newBmp );
        }

2、 URLLoader

URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在下载文本文件、XML 或其它用于动态数据驱动应用程序的信息时,它很有用。 URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于 ActionScript。 它会发出有关下载进度的通知,通过 bytesLoaded 和 bytesTotal 属性以及已调度的事件,可以监视下载进度。

使用dataFormat属性来定义加载的类型

public function URLLoderDemo()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            var urlLoader:URLLoader = new URLLoader();
            //指定以原始二进制数据形式接收下载的数据。
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load( new URLRequest( "test.png" ) );
            urlLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
urlLoader.addEventListener(Event.COMPLETE, onLoader); }

如果使用URLLoader来加载图片,那么必须使用Loader来作为中转才可以显示加载的内容,这大概就是为什么有了URLLoader后,Loader类存在的理由。


 通过Loader的loadBytes属性来加载二进制的内容

protected function onLoader(event:Event):void
        {            
            var urlLoader:URLLoader = event.target as URLLoader;
            trace( urlLoader.data ); //二进制数据
            
            var loader:Loader = new Loader();
            loader.loadBytes( urlLoader.data );
            addChild( loader );
        }

 使用加载上来的图片内容需要通过loaderContentInfo来实现

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

又重新做会Loader所做的工作

protected function onComplete(event:Event):void
        {
            var loaderInfo:LoaderInfo = event.target as LoaderInfo;
            trace( loaderInfo.content );
            trace( loaderInfo.content is Bitmap );
            var bmp:Bitmap = loaderInfo.content as Bitmap;
            //addChild( bmp );
            var bd:BitmapData = bmp.bitmapData;
            var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 );
            newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() );
            var newBmp:Bitmap = new Bitmap( newBD );
            addChild( newBmp );
            
        }

3、 URLStream

 

URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。 在 URLStream 中的读取操作是非阻塞模式的。 这意味着您在读取数据之前必须使用 bytesAvailable 属性来确定是否能够获得足够的数据 。 如果不能获得足够的数据,将引发 EOFError 异常。

原文地址:https://www.cnblogs.com/actionkong/p/3448679.html