Base64编码BSON是否小于BSON?

时间:2010-04-19 17:06:21

标签: base64 bson

Base64编码的BSON是否小于BSON?

3 个答案:

答案 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);