首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Base64编码的BSON比BSON小吗?

Base64编码的BSON比BSON小吗?
EN

Stack Overflow用户
提问于 2010-04-20 01:06:21
回答 3查看 3.2K关注 0票数 3

Base64编码的BSON比BSON小吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-20 01:42:20

Piskvor是对的,Base64编码的-任何东西都比raw长。您可以使用Base64编码将其转换为具有有限字符集的通道,而不是作为一种减小大小的方法。

也许问题应该是:base64编码的BSON比JSON小吗?

如果是这样,那么JSON-vs-BSON在很大程度上依赖于内容。例如,像1.2345678901234567这样的任意浮点数在BSON中以8个二进制字节存储的效率比JSON字符串数字版本更高。但是更常见的数字,比如1,在JSON中以字符串的形式存储要高效得多。

对于字符串值,对于一个长度字,BSON会丢失4个字节,但是对于每个"\ JSON必须转义的字符串,BSON会得到一些恢复,以及更多的包含控制字符的字符串,其中JSON必须使用十六进制序列。(一些JSON编码器还\u-escape每个非ASCII字符,以确保安全传输,而不管字符集是什么。)

IMO:一般来说,BSON与JSON相比并不具有很大的紧凑性优势。它的优势更多在于在低级语言中解码的简单性,以及JavaScript没有的数据类型。对于二进制字符串和其他一些情况,它可能具有边际优势;对于特定的工作负载,它当然值得检查。但BSON规范本身的示例在JSON中要小得多,这很能说明问题。

至于Base64编码的BSON:相同,只是差了33%。

票数 11
EN

Stack Overflow用户

发布于 2010-04-20 01:12:41

否:使用base64,3字节的明文变成4字节的编码文本,因此,无论数据负载是什么,结果总是更大。另请参阅:http://en.wikipedia.org/wiki/Base64

票数 6
EN

Stack Overflow用户

发布于 2012-04-21 06:20:17

刚刚写了这篇文章作为我的解决方案来缩短bson请检查,它可以帮助你:

代码语言:javascript
复制
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;
  } 
}

测试

代码语言:javascript
复制
//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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2669356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档