【问题标题】:Where's a ByteArray's data stored?ByteArray 的数据存储在哪里?
【发布时间】:2011-10-29 04:30:25
【问题描述】:

我正在使用 URLStream 下载一个大文件并在移动应用上本地保存。为此,我需要将下载的字节存储在 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;
  } 
}

下载文件中的这些字节是否存储在内存中? (不过,Profiler 并没有显示任何过多的内存消耗......)

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

【问题讨论】:

    标签: flash actionscript-3 apache-flex actionscript


    【解决方案1】:

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

    我不确定您所说的清理 byteArray 是什么意思。 ByteArray 整体包含构成数据的字节。您当然可以将数组拆分并在某个时间点将其合并回来,但数据本身必须保留在某个位置,以便您下载的数据能够代表它的实际情况。

    【讨论】:

    • 在每个调度的进度事件中,我都会获取最近加载的字节并写入磁盘,这样我就可以在之后清理 ByteArray。这样做的问题是 byteArray clean 方法需要一些时间,并且一遍又一遍地调用它可能比根本不调用更糟糕。真正有趣的是,在运行分析器时,即使使用 urlStream 加载 100Mb 文件,应用程序的 swf 内存消耗也不会显着增加。
    • @cassiozen 如果您正在写入磁盘并进行清除,那么您只会消耗内存中给定的文件块,因此您不会看到消耗的全部 100MB在您的处理程序期间,内存占用也不应该显着增加。这显然取决于流的入站大小。
    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 2012-04-11
    • 2011-12-14
    • 2020-01-07
    • 2011-12-09
    • 2019-05-24
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多