Cordova вычисляет хэш sha1 большого файла без нехватки памяти

Я пытаюсь использовать хэши sha1 в качестве средства проверки изменений файлов, проблема в том, что при попытке вычислить хеш большего файла (50-100 МБ) приложение выдает фатальное исключение, потому что ему не хватило памяти.

Информация о версии:

  • Кордова 3.5
  • Андроид 4.2.2
  • Галактика Вкладка 2
  • org.apache.cordova.file 1.1.0
  • Последняя версия CryptoJS?
  • lib-typedarrays (модуль для CryptoJS) последний?
  • 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 большого файла без нехватки памяти в приложении?


person Chase    schedule 06.06.2014    source источник


Ответы (1)


Мне удалось обойти проблему нехватки памяти, добавив

android:largeHeap="true"

в моем AndroidManifest.xml в теге <application />

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