2014-06-06 8 views
1

파일 변경 사항을 확인하는 수단으로 sha1 해시를 사용하려고했는데 문제는 큰 파일 (50-100MB)의 해시를 계산할 때 문제가 발생한다는 것입니다. 메모리가 부족하여 치명적인 예외가 발생합니다.코르도바는 메모리가 부족한 상태에서 큰 파일의 sha1 해시를 계산합니다.

버전 정보 : 3.5

  • 안드로이드 4.2.2
  • 갤럭시 탭 2
  • org.apache.cordova.file 1.1.0
  • CryptoJS 최신

    • 코르도바?
    • lib-typedarrays (CryptoJS 용 모듈) latest?
    • QJS 최신

    여기 메신저 사용하여 무엇을 :

    function _getFileChecksum(file){ 
    
        var deferred = Q.defer(); 
        if(typeof CryptoJS === 'undefined'){ 
         if(DEBUG){ 
          console.log('CryptoJS is required.'); 
         } 
         return deferred.reject(new Error('CryptoJS is required.')); 
        } 
    
        var reader = new FileReader(); 
    
        reader.onload = function (evt) { 
         if(DEBUG){ 
          console.log('_getFileChecksum: reader finished loading'); 
         } 
         var arrayBuffer = evt.target.result; 
         var wordArray = CryptoJS.lib.WordArray.create(arrayBuffer); 
         var hash = CryptoJS.SHA1(wordArray); 
         if(DEBUG){ 
          console.log('_getFileChecksum: hash = '+hash); 
         } 
         deferred.resolve(hash); 
        }; 
        reader.onerror = function(anError){ 
         if(DEBUG){ 
          console.log('_getFileChecksum: reader error'); 
         } 
         deferred.reject(anError); 
        }; 
        reader.readAsArrayBuffer(file); 
    
        return deferred.promise; 
    } 
    

    지금이 작은 파일에 대한 잘 작동합니다. 하지만 문제가 발생하는 큰 문제가 발생하면 아무도 내가 sha1을 계산하는 방법을 알고있는 응용 프로그램에서 메모리가 부족하지 않고 큰 파일을 가지고 있습니까?

  • 답변

    2

    나는 <application /> 태그에 제의 AndroidManifest.xml에

    android:largeHeap="true" 
    

    을 추가하여 메모리 문제 아웃 극복 할 수 있었다

    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true">