2011-10-29 128 views
0

我正在使用URLStream下载一个大文件并在本地保存在移动应用程序中。要做到这一点,我需要将下载的字节存储上的ByteArray:ByteArray的数据存储在哪里?

private function handleStreamProgress(event : ProgressEvent) : void { 
    if (urlStream.bytesAvailable == 0) return; 
    if (urlStream.connected) { 
    urlStream.readBytes(byteArray, byteArray.length); 
    fileStream.writeBytes(byteArray, bytesOffset); 
    bytesOffset = byteArray.length; 
    } 
} 

从存储在存储下载的文件这些字节? (虽然...探查器不显示任何过多的内存消耗)

我应该在每个字节序列存储后清理byteArray吗?

回答

0

数据存储在内存中,除非您明确将数据推送到磁盘。

我不确定你的意思是清理byteArray。整个ByteArray包含组成数据的字节。您当然可以将数组分开并在某个时间点将其合并,但数据本身必须保留在某处,以便下载的数据能够代表实际的数据。

+0

在每个调度的进度事件我采取最近加载的字节和写入磁盘,所以我可以清理后的ByteArray。这样做的问题是,byteArray clean方法需要一些时间,并且一遍又一遍地调用可能比根本不调用更糟糕。 真正有趣的是,在运行探查器时,即使使用urlStream加载100Mb文件,应用程序也不会显示swf内存消耗的显着增加。 – cassiozen

+0

@cassiozen如果您正在写入磁盘并进行清除,那么您只会在内存中占用文件的一个给定块,所以不会期望您在处理程序期间会看到完整的100MB消耗,也不应该内存占用量显着增加。这显然取决于流的入站大小。 –