![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 12
|
Здравствуйте!
Сразу хочу заметить, что я новичок как на этом форуме, так и в вопросах ActionScript в частности. Поэтому сильно прошу не пинать. ![]() Идея моя заключается в следующем: пользователь скармливает флэшу файл (в общем случае - локальный файл через URLRequest), этот файл начинает загружаться URLStream и как только хватает данных для парсинга файла, закачка прерывается. В идеале это должно работать для файлов любого размера - я ведь читаю только первые пару килобайт, однако ж не всё так гладко. Вот такой небольшой класс реализует чтение (простейший набросок) package Classes.Data { // импорт стандартных классов import flash.net.*; import flash.errors.*; import flash.events.*; //============================================== // класс public class CommonDataParser { //============================================== // данные класса // private var m_loader:URLStream; //============================================== // конструктор // public function CommonDataParser () { trace ("CommonDataParser - constructor"); m_loader = new URLStream (); } //============================================== // "destructor" // public function destroy () { trace ("CommonDataParser - destructor"); if (m_loader != null) { if (m_loader.connected) { m_loader.close (); } m_loader.removeEventListener (Event.COMPLETE, completeHandler); m_loader.removeEventListener (HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); m_loader.removeEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); m_loader.removeEventListener (ProgressEvent.PROGRESS, progressHandler); m_loader.removeEventListener (SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); m_loader = null; } } //============================================== // методы // public function parse (filePath:String):void { if ((filePath != null) && (filePath.length > 0)) { trace ("File path: " + filePath); var req:URLRequest = new URLRequest(filePath); m_loader.addEventListener (Event.COMPLETE, completeHandler); m_loader.addEventListener (HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); m_loader.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); m_loader.addEventListener (ProgressEvent.PROGRESS, progressHandler); m_loader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); try { m_loader.load (req); } catch (error:Error) { trace ("Unable to load requested URL: " + error); } } } private function completeHandler (event:Event):void { trace ("completeHandler: " + event); } private function progressHandler (event:Event):void { trace ("progressHandler: " + event); if (event.target.bytesAvailable > 200000) { trace ("available: " + event.target.bytesAvailable); destroy(); trace ("CommonDataParser - after destroy"); } } private function securityErrorHandler (event:SecurityErrorEvent):void { trace ("securityErrorHandler: " + event); } private function httpStatusHandler (event:HTTPStatusEvent):void { trace ("httpStatusHandler: " + event); } private function ioErrorHandler (event:IOErrorEvent):void { trace ("ioErrorHandler: " + event); } } } Замечал по диспетчеру задач, что памяти особо много на выполнение не уходит, да и проц не сильно подгружается, но наглухо виснет после последнего обновления экрана вслед за окончанием парсинга. Вопрос - с чем это может быть связано, как это можно победить и вообще, можно ли? Может есть другой способ реализации парсинга файлов любой структуры без необходимости их полной загрузки в память (кроме как на Air)? ПС Система Win XP 32bit, Adobe Flash CS4, AS3.0 Спасибо. Последний раз редактировалось alexg; 02.12.2010 в 23:10. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|