Base64编码的BSON是否小于BSON?
答案 0 :(得分:9)
Piskvor的权利,base64-encoded-anything比raw更长。你可以对某些内容进行基础编码,使其具有有限字符库的通道,而不是缩小尺寸的方法。
也许问题应该是:Base64编码的BSON是否小于 JSON ?
如果是这样,那么JSON-vs-BSON非常依赖于内容。例如,像1.2345678901234567
这样的任意浮点数更有效地存储在BSON中的8个二进制字节中,而不是JSON字符串数字版本。但是更常见的数字,例如1
,可以更有效地存储为JSON中的字符串。
对于字符串值,BSON对于一个长度字会丢失4个字节,但是对于每个"
和\
JSON必须转义一些,以及在具有JSON必须使用的控制字符的字符串中更多十六进制序列。 (某些JSON编码器也\u
- 转义每个非ASCII字符,以确保安全传输,无论字符集如何。)
IMO:BSON一般没有比JSON更大的紧凑性优势。它的优势在于简单的低级语言解码,以及JavaScript没有的数据类型。对于二进制字符串和其他一些情况,它可能具有边际优势;它当然值得检查特定的工作量。但它告诉我们,BSON规范中的例子在JSON中要小得多。
至于base64编码的BSON:相同,除了33%更差。
答案 1 :(得分:6)
否:对于base64,3个字节的明文变为4个字节的编码文本,因此无论数据有效负载是什么,结果总是会更大。另见:http://en.wikipedia.org/wiki/Base64
答案 2 :(得分:0)
刚刚写了这个作为缩短json的解决方案 请检查,它可以帮助您:
var bsonShortify = {
encode:function(bson){
return this._hex2urlBase(bson.substr(0,bson.length/2))+this._hex2urlBase(bson.substr(bson.length/2,bson.length/2));
},
decode:function(token){
return this._urlBase2hex(token.substr(0,token.length/2))+this._urlBase2hex(token.substr(token.length/2,token.length/2));
},
_base:62,
_baseChars:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
_urlBase2hex:function(token){
var s = 0, n, l = (n = token.split("")).length, i = 0;
while(l--) s += this._baseChars.indexOf(n[i++]) * Math.pow(this._base, l);
return s.toString(16);
},
_hex2urlBase:function(bson){
var s = "", n = parseInt(bson,16);
while(n) s = this._baseChars[n % this._base] + s, n = Math.floor(n / this._base);
return s;
}
}
TEST
//we have bson
var bson = '4f907f7e53a58f4313000028';
//let's encode it
var urlstring = bsonShortify.encode(bson) // = OqAYQdCHijCDMbRg
//let's decode urlstring
var decoded_bson = bsonShortify.decode(urlstring); // = 4f907f7e53a58f4313000028
console.log('bson',bson);
console.log('urlstring',urlstring);
console.log('decoded_bson',decoded_bson);