Где хранятся данные ByteArray?

#flash #actionscript-3 #apache-flex #actionscript

#flash #actionscript-3 #apache-flex #actionscript

Вопрос:

Я использую 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;
  } 
}
 

Хранятся ли эти байты из загруженного файла в памяти? (Профилировщик не показывает чрезмерного потребления памяти, хотя …)

Должен ли я очищать ByteArray после сохранения каждой последовательности байтов?

Ответ №1:

Данные сохраняются в памяти, если вы явно не отправляете данные на диск.

Я не уверен, что вы подразумеваете под очисткой ByteArray. В ByteArray целом содержит байты, которые составляют данные. Вы, конечно, можете разбить массив на части и объединить его обратно в определенный момент времени, но сами данные должны где-то оставаться, чтобы ваши загруженные данные отображали то, что они есть на самом деле.

Комментарии:

1. При каждом отправленном событии выполнения я беру недавно загруженные байты и записываю на диск, чтобы после этого я мог очистить ByteArray. Проблема при этом заключается в том, что метод очистки ByteArray занимает некоторое время, и его повторный вызов может быть хуже, чем вообще не вызывать. Что действительно интересно, так это то, что при запуске профилировщика приложение не показывает значительного увеличения потребления памяти swf, даже загружая файл размером 100 МБ с URLStream.

2. @cassiozen Если вы выполняете запись на диск и очистку, вы будете использовать только определенный блок вашего файла в памяти, поэтому не следует ожидать, что вы увидите все 100 МБ, потребляемые во время обработки, и при этом объем памяти не должен значительно увеличиваться. Очевидно, что это зависит от размера входящего потока.