我正在尝试使用sha1哈希作为检查文件更改的方法,问题是当尝试计算更大文件的哈希值(50-100MB)时,应用程序会抛出致命异常,因为它内存不足
版本信息:
以下是我正在使用的内容:
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有一个大文件而不会耗尽应用程序中的内存?
答案 0 :(得分:2)
我能够通过添加
解决内存不足的问题android:largeHeap="true"
在<application />
标记
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true">