Adobe AIR。获取文件的MD5

时间:2012-02-17 17:38:18

标签: actionscript-3 flex air

我这样做了,但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 个答案:

答案 0 :(得分:4)

尝试使用Bloody's MD5 implementation。它显然更快很多

虽然它会加速哈希计算,甚至可能是充分的,但你并没有真正解决潜在的问题,即你需要在单线程应用程序模型中进行非阻塞操作。在Flash / AIR中,这通常通过将工作分解为更小的块来完成,并且仅执行一个块处理每个帧,而不是在一帧期间同时处理所有帧。甚至还有一个cool framework来简化这个!

我注意到您正在使用的库MD5Stream是为增量更新而构建的 - 因此您可以轻松地为每个帧提供少量文件,直到处理完整个文件。这将允许帧速率在计算哈希值时保持相对恒定。