2012-02-17 68 views
1

我這樣做了,但Adobe Air掛了幾秒鐘。Adob​​e AIR。獲取文件的MD5

 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

必須是一個大文件。分解成碎片也許? – 2012-02-17 17:40:36

回答

4

嘗試使用Bloody's MD5 implementation。這顯然是很多更快。儘管它可以加快哈希計算,甚至可以充分地加快哈希計算的速度,但是您並不真正解決底層問題,這就是您希望在單線程應用程序模型中使用非阻塞操作。在Flash/AIR中,這通常是通過將工作分解爲更小的塊來完成的,並且每幀僅處理一個塊的值,而不是一次處理一個幀。甚至有一個cool framework來簡化這個!

我注意到您正在使用的庫MD5Stream是爲增量更新而構建的,因此您可以輕鬆地爲每個文件塊提供一小塊文件,直到處理完整個文件。這將允許幀速率在散列計算時保持相對恆定。