sol數(shù)據(jù)區(qū)是按照key-value方式存儲的喷斋,存儲的順序是:key的長度-key-value類型-value長度(僅字符串)-value-00.
其中key的長度是按2n+1(n為長度)計算的啤斗,如0x05換算為長度是2
key是根據(jù)前面的長度取隨后的幾個字節(jié),若前面長度是2那就應(yīng)該取0x05后的兩個字節(jié)做為key,sol默認為utf-8格式的所以如果是windows系統(tǒng)下中文key或者value的需要指定UTF-8字符集膨疏。
接下來是value的類型致稀,類型我也并未解析完全。
- 02 邏輯非
- 03 邏輯是
- 04 整型
- 05 長整赚窃,小數(shù)
- 06 字符册招,字符串
- 09 數(shù)組
- 0a Object對象
以上所有類型后面都接00。
邏輯值解析(02勒极,03)
邏輯值解析比較簡單是掰,因為是和非是分開處理的所以02,03既是類型也是值辱匿。如下是isA=true的解析示例
字符&字符串解析(06)
字符串解析也較簡單键痛,在類型06后面會跟value長度(長度也是按2n+1的方式計算),隨后是value值炫彩,這里需要注意的是sol默認編碼為utf-8,所以注意windows系統(tǒng)下中文需要對編碼進行utf8處理絮短。如下是name=左拖拖的解析示例
整數(shù)解析(04)
sol整數(shù)范圍是-228 ~ 228-1,其中02<sup>21</sup>-1為小整胁勺,2<sup>21</sup>228-1為大整世澜,sol對小整,大整以及負數(shù)的處理都是不同的署穗。
- 小整 最低位從007f其余位從80ff寥裂,最低位大于7f時產(chǎn)生進位
- 大整 占用4個字節(jié),最低位從00ff其余位從80ff
- 負數(shù) 占用4個字節(jié)案疲,最低位從ff00封恰,其余位從ff80
舉個小整的例子:04 86 a0 2d 00
1). 04是類型,00是結(jié)束符褐啡,中間的位數(shù)表示值诺舔。
2). 最低位2d不做處理
3). 除了最低位從007f,其余位從80ff,所以其余位需要減掉80
4). 第二位a0的處理: (a0 - 80) x 80
5). 第三位86的處理: (86 - 80) x 80 x 80
6). 最后將三位的結(jié)果相加即可: 98304 + 4096 + 45 = 102445
大整與小整的處理方式相同,只是進位從80變成為ff备畦,就不做例子了低飒。
再舉個負數(shù)的例子:04 ff ff ff ff 00
負數(shù)的處理與大整完全相同,與二進制負數(shù)也很相似懂盐,只是符號位并不會占整個最高褥赊。二進制最高位0表示正,1表示負莉恼。上面被解析為-1
長整&小數(shù)解析(05)
整數(shù)從41 b0開始拌喉,負數(shù)從c1 b0開始,小數(shù)未破解成功俐银。
該類型的值長度固定為8尿背,前五位與整數(shù)處理相同每位均從00ff,后三位可以看成補位或借位捶惜,前面提到位數(shù)從00ff如果需要表示更大的數(shù)就從后三位借位讓后三位與第四位組成一個階數(shù)田藐。
若41 c0 00 00 00 00 00 00 表示1 則41 c0 00 00 00 80 00 00 表示2
41 c0 00 00 01 00 00 00 表示3 則41 c0 00 00 01 80 00 00 表示4
這樣的話就可以將表示范圍擴大到2N倍。
負數(shù)處理完全一樣無特殊處理。
測試過程中發(fā)現(xiàn)最大可處理9007199254740992(后三位剛好使用完ff ff ff)汽久,超過9007199254740992將無法正常處理負數(shù)超過-9007199254740993無法正常處理茴晋。
其中有一個特殊的值-0也被解析為長整80 00。
舉個例子:05 42 20 00 03 c4 80 00 00 00
1).前兩位42 20 比起始值41 b0 大 7 x 16
2).根據(jù)前面提的范圍擴大2N倍那解析出(20 + 21 + 22 + 23 + 24 + 25 + 26) x 16 x 2563 = 34091302912
3).03 : 3 x 2561 x 27 = 98304
4).c4 : 196 x 2560 x 27 = 25088
5).后三位的處理是從高位到低位的回窘,0x80 / 256 / 27 = 64
6).最后相加 34091302912 + 98304 + 25088 + 64 再加上起始的41 b0(1 << 28)最后得到34359861824
數(shù)組解析(09)
數(shù)組的解析,類型后面緊跟數(shù)組長度市袖,長度后面一位用途暫時未知啡直,后面的部分是結(jié)合上面所有的類型進行處理,如下是one-dimensional={"a", "b", "c"}的解析示例