最近有這樣一個(gè)需求:讀取加密過的地圖數(shù)據(jù)文件骑晶,并且根據(jù)給出的數(shù)據(jù)格式進(jìn)行解密痛垛,從而取得數(shù)據(jù)。
protobufjs就是這樣一種工具桶蛔。
它是一種數(shù)據(jù)轉(zhuǎn)換榜晦,序列化的工具。最初由google提出羽圃,并且開源之后吸引了各行業(yè)的人不斷開發(fā)乾胶,優(yōu)化,更新各個(gè)語言平臺的版本朽寞。
話不多說识窿,本篇文章注重實(shí)際需求,所以理論知識不會詳細(xì)介紹脑融,也算是給自己的一份備忘錄啦喻频。
安裝
Node環(huán)境下
輸入
npm i protobufjs
如果是5.0版本,可能還需要安裝bytebuffer
和long
截止2017/6/12,最新版本是6.73肘迎,因此優(yōu)先介紹最新版本甥温。
定義數(shù)據(jù)格式文件(proto)
根據(jù)需求,定義自己需要的數(shù)據(jù)格式proto文件妓布。
proto文件定義的數(shù)據(jù)結(jié)構(gòu)將用于數(shù)據(jù)轉(zhuǎn)換的過程姻蚓。
相當(dāng)于一把“鑰匙”,你拿著這把鑰匙才能看到解碼后的內(nèi)容匣沼。
使用proto
使用proto文件有兩個(gè)方法:
- 使用protobufjs對象的load()方法直接加載
- 使用命令行編譯proto文件狰挡。生成自己需要的文件。你可以生成json文件释涛,可以生成commonjs模塊文件等等加叁。
編譯方法:
·npm i protobufjs -g
安裝完成即可使用CLI
然后使用pbjs ....的命令即可編譯。具體命令參考文檔唇撬。注意版本差異它匕。
讀取文件,轉(zhuǎn)換數(shù)據(jù)
不管你采用以上的哪一種方法窖认,現(xiàn)在開始讀取編碼文件了豫柬。
你可以使用node.js的文件系統(tǒng)讀取數(shù)據(jù)告希,也可以使用js的ajax讀取數(shù)據(jù)。
讀取數(shù)據(jù)之后轮傍,直接使用protobufjs的decode方法就可以了暂雹。具體語法可以參考最后給出的鏈接,對于protobufjs的其他知識都有詳細(xì)介紹创夜。
如果讀取的data不對杭跪,你可能需要加一句
var datas = new Uint8Array(data)
5.0版本的異同
5.0版本使用new Builder()[message]等的方式定義。
decode的使用對象也有所差異驰吓,具體可參考文檔涧尿。
官方github地址
官方API
protobuf語法指南
csdn介紹1
csdn介紹2
nodejs中使用protobufjs