BSON结构

flyfish 2015-7-24

主要解释bsonspec.org站点上的两个样例

{"hello": "world"} 

hello为key。world为value 相应的是

  \x16\x00\x00\x00                   
  \x02                               
  hello\x00                          
  \x06\x00\x00\x00world\x00
  \x00 

解释每一行的意思

\x16\x00\x00\x00 
\x表示16进制的方式
4个字节表示文档的大小,包含文档末尾的'\0','\0'是\x00 0x16十进制是22,这个文档的大小是22个字节
採用小端(Little Endian) 原文:Each type must be serialized in little-endian format.
每一种类型必须依照little-endian格式序列化。

\x02
一个字节表示value的类型,通过查看bsonspec 文档
原文:"\x02" e_name string UTF-8 
\x02 表示value的类型是string。字符串编码使用的是UTF-8 

hello\x00 
表示以'\0'结尾的字符串

\x06\x00\x00\x00world\x00
\\x06\x00\x00\x00 前4个字节表示以'\0'结尾的字符串world的长度

\x00 
结束符


{"BSON": ["awesome", 5.05, 1986]}

原文:the array ['red', 'blue'] would be encoded as the document {'0': 'red', '1': 'blue'}. The keys must be in ascending numerical order.
数组['red', 'blue']将要编码为{'0': 'red', '1': 'blue'}。key必须依照数值大小递增排序(升序)。
也就是["awesome", 5.05, 1986]将被编码为{ "0":"awesome", "1":5.05,"2":1986}
{"BSON": [ "0":"awesome", "1":5.05,"2":1986]}

相应是

  \x31\x00\x00\x00
  \x04BSON\x00
  \x26\x00\x00\x00
  \x02\x30\x00\x08\x00\x00\x00awesome\x00
  \x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
  \x10\x32\x00\xc2\x07\x00\x00
  \x00
  \x00

解释每一行的意思
\x31\x00\x00\x00
4个字节表示文档的大小。x31的10进制是49,这个文档的大小是49个字节

\x04BSON\x00
原文:"\x04" e_name document Array
\x04表示value的类型是数组表示的document
BSON\x00 表示以'\0'结尾的字符串

\x26\x00\x00\x00 
4个字节表示数组的大小即中括号的内容,x26的10进制是38

\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x02 表示value的类型是string
x30表示key,字符0的ASCII码是48,16进制是x30
纵向看正好是x30。x31,x32
\x08\x00\x00\x00  4个字节表示awesome\x00 长度

\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40

\x01
原文\x01" e_name double 64-bit binary floating point
表示64位的二进制浮点数
x31\x00表示以'\0'结尾的字符串1,字符1的ASCII码是x31
x33\x33\x33\x33\x33\x33\x14\x40
double的5.5转换成16进制为40 14 33 33 33 33 33 33

\x10\x32\x00\xc2\x07\x00\x00
原文:"\x10" e_name int32 32-bit integer
\x10表示32位的整数
\x32\x00表示以'\0'结尾的字符串2,字符2的ASCII码是x32
\xc2\x07\x00\x00
也就是16进制的7c2转换成10进制是1986

  \x00

  \x00

结束符

BSON结构的更多相关文章

  1. MongoDB之bson的介绍

    MongoDB之bson的介绍 1. 什么是bson BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JS ...

  2. MongoDB之一介绍(MongoDB与MySQL的区别、BSON与JSON的区别)

    MySQL与MongoDB的操作对比,以及区别 MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL ...

  3. BSON入门

    1.概念BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组 ...

  4. MongoDB笔记

    mongodb简介 MongoDB 是一个基于分布式文件存储的数据库.存储的是Bson结构的文档(二进制的JSON),内部执行引擎为JS解释器,把文档存储为BSON结构,在查询时,转换为JS对象,可以 ...

  5. Worktile 技术架构概要

    其实早就该写这篇博客了,一直说忙于工作没有时间,其实时间挤挤总会有的,可能就是因为懒吧!从2013年11月一直拖到现在,今天就简单谈谈 Worktile 的技术架构吧 . Worktile 自上线到现 ...

  6. MongoDB的导入导出(7)

    导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项: -h host   主机 --port port    端口 -u username 用户名 -p pas ...

  7. MongoDB的ObjectId和基本操作增删改查(3)

    ObjectId 基本操作增删改查 增: insert 介绍: mongodb存储的是文档,. 文档是json格式的对象. 语法: db.collectionName.insert(document) ...

  8. worktile的架构设计

    Worktile自上线两年多以来,以良好的用户体验和稳定的服务,获得了用户的认可和喜爱.截止笔者写这篇文章的时候,已经有超过10万家团队在使用Worktile.作为团队协作工具,从技术上分析首先要解决 ...

  9. 高级php面试题(转)

    一.mysql相关知识    1. mysql优化方式            MYSQL 优化常用方法            mysql 性能优化方案      2.如何分库分表            ...

随机推荐

  1. 关于Farseer.net轻量级ORM开源框架 V1.0 概念版本开发的消息

    V0.2版的开源距离今天(05年03月)已有近3年的时间.可以说这个版本已经有点落伍的感觉了,呵呵. V0.2版至今一直处于BUG的修复及一些细小功能的增加,所以版本号上一直没有变化. 其实在这1.2 ...

  2. java调用jacob生成pdf,word,excel横向

    /* * 传进一个office文件的byte[]以及后缀,生成一个pdf文件的byte[] */ public byte[] jacob_Office2Pdf(byte[] srcFileBytes, ...

  3. 迅为IMX6UL工业级商业扩展级核心板兼容同一底板

    商业级IMX6UL核心板: ARM Cortex-A7架构 主频高达528 MHz 核心板512M DDR内存 8G EMMC 存储 运行温度:-20℃ ~ +80℃ CPU集成电源管理 核心板尺寸仅 ...

  4. 迅为嵌入式4418/6818开发板QT-HDMI显示

    本文转自迅为论坛:http://www.topeetboard.com 平台:迅为4418/6818开发平台 1.首先请确认下光盘资料的日期(只有20171120及以后更新的光盘支持QT HDMI显示 ...

  5. Swift3命名空间的实现

    最近在看一些Swift开源库的时候,发现了一些优秀的开源库都使用了命名空间,例如Kingfisher这个开源库中,就针对UIImage,UIImageView,UIButton做了命名空间的扩展.通过 ...

  6. vsphere中的linux虚拟机安装vmware-tools

    先在vcenter中选中虚拟机点击安装这个工具,如图 然后这台linux虚拟机的控制台操作,挂载先建立挂载目录 cd /mnt #在挂载建一个用来挂载的文件. mkdir cdrom 使用mount命 ...

  7. 安装exe4j出现jre不匹配问题

    在安装exe4j 客户端,提示如下错误: 提示的错误信息大意如下:install4j安装时,在本系统中没有找到JRE(JavaRuntime Environment)(版本要求:最低1.5,最高1.6 ...

  8. ORA-28000: the account is locked-详细解决方案

    运行-->cmd-->sqlplus /nolog conn system/orcl(或预设的密码) alter user scott identified by tiger(或预设密码) ...

  9. db2事务日志已满解决办法

    查看事务日志配置(MICRO_11为数据库名称): db2 get db cfg for MICRO_11 运行结果: 日志文件大小(4KB)                         (LOG ...

  10. find -print0和xargs -0原理及用法

    平常我们经常把find和xargs搭配使用,例如: find . -name "*.txt" | xargs rm 但是这个命令如果遇到文件名里有空格或者换行符,就会出错.因为xa ...