Я пытаюсь использовать хэши 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 большого файла без нехватки памяти в приложении?