您的位置:首页 > 其它

Loader ,URLLoader ,URLStream的使用区别(转)

2011-09-28 18:24 661 查看
本文转自:转载自FLEX开发乐园 http://www.flexswf.com (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 lbynet
*/
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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: