Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269929
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类: JavaScript

2016-05-17 17:26:29

下面的代码对数组进行base64编码,但是每次循环都会产生一个string对象,当编码很大的文件时(如70M)时,就会产生70个base64对象,内存占用量从1,到70M,导致程序占用大量内存,且无法回收。最后程序崩溃;

点击(此处)折叠或打开

  1. var ENCODE_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  2. function arrayToBase64(array) {
  3.     var src = new Uint8Array(array);
  4.     var len = src.length;
  5.     var base64 = '';
  6.     var srcOff = 0;
  7.     while (len > 0) {
  8.         base64 += ENCODE_TABLE.charAt((src[srcOff] >> 2) & 0x3F);
  9.         if (len >= 3) {
  10.             base64 += ENCODE_TABLE.charAt(((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F));
  11.             base64 += ENCODE_TABLE.charAt(((src[srcOff + 1] << 2) & 0x3C) | ((src[srcOff + 2] >> 6) & 0x03));
  12.             base64 += ENCODE_TABLE.charAt(src[srcOff + 2] & 0x3F);
  13.             srcOff += 3;
  14.             len -= 3;
  15.         } else if (len == 2) {
  16.             base64 += ENCODE_TABLE.charAt(((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F));
  17.             base64 += ENCODE_TABLE.charAt((src[srcOff + 1] << 2) & 0x3C);
  18.             srcOff += 2;
  19.             len -= 2;
  20.         } else {
  21.             base64 += ENCODE_TABLE.charAt((src[srcOff] << 4) & 0x30);
  22.             len -= 1;
  23.         }
  24.     }
  25.     return base64;
  26. }

阅读(1320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~