2个加载作用

102 篇文章 0 订阅
99 篇文章 0 订阅
第一话:加载Base64 encoded string

通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。

问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化为ByteArray,有了ByteArray数据,我们就可以生成图片了。

代码如下:



//http://www.motobit.com/util/base64-decoder-encoder.asp
//你可以在线把一张小图片转为base64 string,把字符串粘贴到这里赋值给变量str
//过些天做个有输入框的实例,可以把你得到的字符串粘到里面,生成图片
var str:String = "";
var byteArr:ByteArray = Base64.converToByteArray(str);
var loaderoader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.loadBytes(byteArr);
function onImageLoaded(e:Event):void{
addChild(loader);
trace(loader.width + " : " + loader.height);
}


第二话:简单渐进式加载图片类ByteLoader

上面只是为了给大家开开眼界,不表。你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。”

嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单。

原理是:

用URLStream类去加载图片数据流,
然后用帧循环stream.readBytes(data, data.length)将数据读入ByteArray中;
同时在帧循环中卸载Loader中旧的数据,加载新的数据super.unload();super.loadBytes(data);
代码如下:

package {
import flash.events.EventDispatcher;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.net.URLStream;
import flash.net.URLRequest;
import flash.display.Loader;
public class ByteLoader extends Loader{
public var url:String;
public var data:ByteArray;
private var stream:URLStream;
public function ByteLoader(url:String = ""){
if(url != ""){
loadUrl(url);
}
}
//加载
public function loadUrl(_url:String):void{
url = _url;
data = new ByteArray;
stream = new URLStream;
stream.load(new URLRequest(url));
stream.addEventListener(Event.COMPLETE,completeFun);
stream.addEventListener(ProgressEvent.PROGRESS,progressFun);
addEventListener(Event.ENTER_FRAME,loaddata);
}
private function loaddata(e:Event):void{
if (stream.bytesAvailable > 0){
stream.readBytes(data, data.length);
}
if (data.length > 0){
super.unload();
super.loadBytes(data);
}
}
//加载中
private function progressFun(erogressEvent):void{
if(stream.bytesAvailable == 0) return;
dispatchEvent(e);
trace(e.bytesLoaded);
}
//加载完成
private function completeFun(e:Event):void{
stream.removeEventListener(Event.COMPLETE,completeFun);
stream.removeEventListener(ProgressEvent.PROGRESS,progressFun);
dispatchEvent(e);
this.closeStream();
}
//清除数据
public function closeStream():void{
if (stream){
if (stream.connected) stream.close();
}
if (hasEventListener(Event.ENTER_FRAME)){
removeEventListener(Event.ENTER_FRAME, loaddata);
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java类加载器的作用是将Java字节码文件(.class文件)加载到内存中,并将其转换为可执行的Java类。它负责在运行时动态地加载Java类,以便可以创建对象并执行类中的方法。 具体来说,类加载器的主要作用包括: 1. 加载:类加载器负责从文件系统、网络或其他来源加载字节码文件。它会根据类的全限定名查找并读取对应的字节码文件。 2. 验证:类加载器会验证字节码文件的合法性,确保它符合Java虚拟机规范。这包括检查字节码的结构、语法和依赖关系等方面。 3. 准备:在类加载过程中,类加载器会为静态变量分配内存,并设置默认值。这些变量在后续的初始化阶段被赋予正确的初始值。 4. 解析:类加载器会将字节码中的符号引用转换为直接引用,以便在运行时能够直接定位到相关的类或方法。 5. 初始化:类加载器会执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。这是类加载过程中的最后一步。 6. 缓存:为了提高性能,类加载器会缓存已加载的类。如果同一个类被多次加载,可以直接从缓存中获取,避免重复加载和初始化。 通过自定义类加载器,还可以实现一些特殊的加载需求,例如从加密文件中加载类、动态生成类等。类加载器是Java虚拟机的重要组成部分,它保证了Java程序的灵活性和动态性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值