Cordova计算大文件的sha1哈希值而不会耗尽内存
Cordova calculate sha1 hash of large file without running out of memory
我试图使用sha1哈希作为检查文件更改的一种手段,问题是当试图计算更大文件(50-100MB)的哈希时,应用程序抛出致命异常,因为它耗尽了内存。
版本信息:
- 3.5科尔多瓦Android 4.2.2
- Galaxy Tab 2
- org.apache.cordova。文件1.1.0
- CryptoJS最新吗?
- lib-typedarrays(模块为CryptoJS)最新?
- qj最新
下面是我使用的:
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,而不会在应用程序中耗尽内存吗?
我可以通过添加
来解决内存不足的问题。android:largeHeap="true"
在我的AndroidManifest.xml在<application />
标签
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true">
相关文章:
- 在Javascript中实现对哈希值的暴力攻击
- 用户单击带有哈希值的链接以访问该页面,如果禁用Javascript会发生什么情况
- 要发送到控制器的 HREF 链接中的哈希值
- 使用 JavaScript 计算 Blob 的哈希值
- JavaScript 文件哈希值与文件的一部分一起生成
- JavaScript 隔离哈希值
- JavaScript 获取以前的哈希值
- 设置使用 window.open() 打开的空白页的哈希值
- Chrome 不返回哈希值
- Javascript 使用哈希值重新加载页面
- 为什么从其他网络返回会保留最后一个哈希值,同时显示第一个哈希值的内容
- 来自 Javascript 和 PHP 的不同哈希值
- 使用Javascript从url中获取空哈希值
- 如何使用JS重定向到具有哈希值的引用URL
- 单击一页滚动菜单时更改URL哈希值
- 是否可以在Mustache中基于哈希值切换模板部分
- 哈希值和后退/下一步按钮
- javascript哈希值验证
- 如何将哈希值转换为数组
- Cordova计算大文件的sha1哈希值而不会耗尽内存