我这样做了,但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的过程?
答案 0 :(得分:4)
尝试使用Bloody's MD5 implementation。它显然更快很多。
虽然它会加速哈希计算,甚至可能是充分的,但你并没有真正解决潜在的问题,即你需要在单线程应用程序模型中进行非阻塞操作。在Flash / AIR中,这通常通过将工作分解为更小的块来完成,并且仅执行一个块处理每个帧,而不是在一帧期间同时处理所有帧。甚至还有一个cool framework来简化这个!
我注意到您正在使用的库MD5Stream是为增量更新而构建的 - 因此您可以轻松地为每个帧提供少量文件,直到处理完整个文件。这将允许帧速率在计算哈希值时保持相对恒定。