Adobe AIR.Получить MD5 файла - PullRequest
1 голос
/ 17 февраля 2012

Я сделал это таким образом, но Adobe Air зависает на несколько секунд.

        private function test():void
        {
            fileStream = new FileStream(); 
            fileStream.addEventListener(IOErrorEvent.IO_ERROR, fileError);
            fileStream.addEventListener(Event.COMPLETE, opened);
            fileStream.openAsync(filePath, FileMode.READ);
        }

        protected function opened(event:Event):void
        {
            var bytes:ByteArray = new ByteArray();
            fileStream.readBytes(bytes);
            fileStream.close();
            // MD5Stream from package com.adobe.crypto.MD5Stream  https://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/crypto/MD5Stream.as
            var md5stream:MD5Stream = new MD5Stream;
            trace(md5stream.complete(bytes)); // md5    
        }

Как сделать процесс получения md5 без зависания?

1 Ответ

4 голосов
/ 17 февраля 2012

Попробуйте использовать Реализация Bloody MD5 .Это, очевидно, на лот быстрее.

Хотя это ускорит вычисление хеша, возможно, даже адекватно, вы на самом деле не решаете основную проблему, которая заключается в том, что вы хотите неблокирующая операция в однопоточной прикладной модели.В Flash / AIR это обычно делается путем разбиения работы на более мелкие фрагменты и выполнения обработки только одного фрагмента в каждом кадре, а не сразу за один кадр.Есть даже классная структура , чтобы упростить это!

Я заметил, что используемая в настоящее время библиотека, MD5Stream, создана для инкрементных обновлений - так что вы можете легко кормить ее небольшими порциямифайл каждый кадр, пока весь файл не будет обработан.Это позволит частоте кадров оставаться относительно постоянной, пока вычисляется хеш.

...