如题:
__d('BitMap', [], (function a(b, c, d, e, f, g) {
var h = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
function i() {
'use strict';
this.$BitMap1 = [];
}
i.prototype.set = function(l) {
'use strict';
this.$BitMap1[l] = 1;
return this;
};
i.prototype.toString = function() {
'use strict';
var l = [];
for (var m = 0; m < this.$BitMap1.length; m++)
l.push(this.$BitMap1[m] ? 1 : 0);
return l.length ? k(l.join('')) : '';
};
i.prototype.toCompressedString = function() {
'use strict';
if (this.$BitMap1.length === 0) return '';
var l = [],
m = 1,
n = this.$BitMap1[0] || 0,
o = n.toString(2);
for (var p = 1; p < this.$BitMap1.length; p++) {
var q = this.$BitMap1[p] || 0;
if (q === n) { m++; } else {
l.push(j(m));
n = q;
m = 1;
}
}
if (m) l.push(j(m));
return k(o + l.join(''));
};
function j(l) {
var m = l.toString(2),
n = '0'.repeat(m.length - 1);
return n + m;
}
function k(l) {
var m = (l + '00000').match(/[01]{6}/g),
n = '';
for (var o = 0; o < m.length; o++)
n += h[parseInt(m[o], 2)];
return n;
}
f.exports = i;
}), null);
1
btjoker 2017-01-05 13:00:04 +08:00
base64 和图片相关
你这代码没头没尾的, 让人猜? |
2
Nitroethane 2017-01-05 13:01:49 +08:00 via Android
函数的命名方式也是奇葩
|
3
Nutlee 2017-01-05 13:15:51 +08:00
这代码是压缩后的代码又格式化过的吧,建议看找源代码看啊 压缩会优化命名.....
|
4
alwayshere 2017-01-05 13:23:31 +08:00
@Nitroethane 这是压缩后的代码,函数命名全变了
|
5
polun 2017-01-05 13:45:52 +08:00
感觉像压缩字符串的。
|
6
rekulas 2017-01-05 13:56:55 +08:00
感觉像压缩二进制数据的,如果是,作者技术不错啊
|
7
enenaaa 2017-01-05 14:10:12 +08:00
用行程编码方式将二进制压缩成字符串, j 是具体的转换函数。
|
8
enenaaa 2017-01-05 14:27:29 +08:00 1
上面一条说得不太对, 应该是类似 base64 那样的转换编码。
|
9
iEverX 2017-01-05 14:29:45 +08:00 1
bitmap 只有 0 和 1 , toCompressedString 里面的 l 记录了连续的 0 或者 1 的次数, j 函数想字符串前面加的 0 是为了能够区分连续的两个次数。 o + l.join('')是压缩后的 01 字符串
|
10
davidzd 2017-01-05 15:16:57 +08:00
压缩字符串啊。。
|
11
limerick 2017-01-05 15:26:52 +08:00 1
toString 对二进制数据进行 base64 。 toCompressedString 对数据进行压缩处理然后进行 base64 。不过这个压缩处理要看压缩对象了,他这个处理方式是直接根据二进制中 0 , 1 的重复次数进行压缩。如果分布不是很连续感觉压缩之后打了很多。
|
12
MrSong0607 OP |