19.5.边下载边访问数据

问题
我想边下载边访问数据
解决办法
使用flash.net.URLStream 实例可在下在过程中立即读取二进制数据
讨论
第19.4章讨论了如何检测数据下载进度,但是由于URLLoader类本身的限制,只能等数据全部下载完才能读取数据,要想边下载边读取可使用URLStream类代替之。

URLStream 可以边下载边以二进制形式读取数据, URLLoader 的dataFormat 属性为DataFormat.BINARY时和URLStream非常类似,它们有相同的事件,关键的区别是处理progress事件的方式不同而已。

在URLLoader 中,progress 事件在检测多少已下载的数据或显示下载进度方面有用,而URLStream 中的progress 事件允许使用bytesAvailable 属性和下列方法如readInt( ), readByte( ),readBoolean( )检查下载的数据。

当使用URLLoader 不是很有效时或访问的数据都是二进制时最好使用URLStream。
下面的例子代码使用URLStream 读取一个.txt 文件,访问文件中的字节数据:
+展开
-ActionScript
package {
import flash.display.*;
import flash.events.*
import flash.net.*;
public class CheckProgressExample extends Sprite {
public function CheckProgressExample( ) {
var streamer:URLStream = new URLStream( );
// Listen for the progress event to act on data
// as it is received
streamer.addEventListener( ProgressEvent.PROGRESS, handleProgress );
streamer.load( new URLRequest( "example.txt" ) );
}
private function handleProgress( event:ProgressEvent ):void {
// Cast the target of the vent as a URLStream
var streamer:URLStream = URLStream( event.target );
// 遍历所有已读取得字节数据
while ( streamer.bytesAvailable > 0 ) {
// Read a byte value and output it to the console window
trace( "Read byte: " + streamer.readByte( ) );
}
}
}
}

从上面的代码中可以看到,在进行读之前最好检测下bytesAvailable 属性,如果读取的字节超出缓冲的结果则会抛出EOFError 异常。

加支付宝好友偷能量挖...


评论(0)网络
阅读(97)喜欢(0)flash/flex/fcs/AIR