Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言无关,和平台无关,具有良好的可扩展性。Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议。
Portobuf的序列化的结果体积要比XML、JSON小很多,XML和JSON的描述信息太多了,导致消息要大;此外Portobuf还使用了Varint 编码,减少数据对空间的占用。
Portobuf序列化和反序列化速度比XML、JSON快很多,是直接把对象和字节数组做转换,而XML和JSON还需要构建成XML或者JSON对象结构。
student.proto文件
message Student
{
required string id = 1;
required string name = 2;
required string address = 3;
}
运行下面的命令
protoc --js_out=import_style=commonjs,binary:. student.proto
或者windows平台也可以如下编译
E:\portobuf>protoc.exe --js_out=import_style=commonjs,binary:. student.proto
会当前目录生成
student_pb.js
其中的--js_out的语法如下:
--js_out=[OPTIONS:]output_dir
如上面的例子中的option为 import_style=commonjs,binary, "."为生成文件的目录,这里为当前目录
npm install -g require
npm install -g browserify
npm install google-protobuf
打包js文件export.js
var student= require('./student_pb');
module.exports = {
DataProto: student
}
编译生成可用js文件
browserify exports.js -o student_pb_web.js
普通类型字段(required/optional)
get{FIELD}()
set{FIELD}(value)
clear{FIELD}(value)
数组类型字段操作(repeated)
add{FIELD}(value)
clear{FIELD}List()
get{FIELD}List()
setInterestList(array)
序列化/反序列化
serializeBinary() // 序列化
deserializeBinary(bin) // 反序列化
调试
toObject()
var student= new proto.Student();
student.setId("110105199001010101");
student.setName("沙克");
student.setAddress("北京朝阳");
console.log(student.toObject());
var bytes = student.serializeBinary();
console.log(bytes );//序列化后的数据