Google Protocol Buffer 的各语言实现版本

十年热恋 提交于 2020-01-07 07:15:25

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Google Protocol Buffer 专门用来串行化和反串行化对象,但官方仅实现了C++、Python、Java三种语言。其他语言版本也相继由不同的作者来实现。虽然有一定缺陷,也足以在大部分的项目中使用了。


.proto 的基本写法:


package feeds;
message Feed {
  optional string title = 1;
  message Entry {
    optional string title = 1;
  }
  repeated Entry entry = 2;
}

Python、C++、Java三种语言版本请见 

https://developers.google.com/protocol-buffers/docs/reference/overview 

代码生成:



<?php
require_once('../parser/pb_parser.php');
$test = new PBParser();
$test->parse('./feeds.proto');
?>
串行化:



<?php
require_once('message/pb_message.php');
require_once('pb_proto_test.php');
$feed = new Feed();
$feed->set_title('asdf');
$t = $feed->add_entry();
$t->set_title('dddd');
$bin = $feed->SerializeToString();
?>
反串行化:



<?php
require_once('message/pb_message.php');
require_once('pb_proto_test.php');
$feed = new Feed();
$feed->ParseFromString($bin);
?>

Node.js版本: 

https://npmjs.org/package/protobuf

代码生成:

protoc --descriptor_set_out=feeds.desc --include_imports feeds.proto
串行化与反串行化:

var fs = require('fs');
var Schema = require('protobuf_for_node').Schema;
var schema = new Schema(fs.readFileSync('feeds.desc'));
var Feed = schema['feeds.Feed'];
var aFeed = Feed.parse(aBuffer);
var serialized = Feed.serialize(aFeed);


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!