一个混合语言数据标准:
(1)用protobuf编写类似XML格式的文本文件作为你的数据结构定义。
(2)用protobuf可执行程序生成对应的类的头文件和源文件。
(3)将<google>文件夹连同生成的头文件和源文件放到一个项目中使用。
(4)可生成C++、Java、C语言对应的类定义文件
(5)A语言序列化之后得到一个字符流S,这种字符流S可以被传递给语言B直接逆序列化,逆序列化之后变成一个语言B的对象
官方网站 :https://code.google.com/p/protobuf/
参考:http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
如果对上文使用过程中产生疑问,你可能需要看下面的更多介绍:
1 下载和安装编译器:在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。
1.1 如果你下载了:https://code.google.com/p/protobuf/downloads/detail?name=protoc-2.5.0-win32.zip则直接运行exe文件即可生成源代码,无需编译。建议windows环境下使用此工具,非常小。
2 你的proto文件名:student.proto,
内容:
message student
{
required int32 id = 1;
required string name = 2;
}
放在文件夹:SRC_DIR中,而SRC_DIR文件夹与protoc.exe文件同目录,另外为了盛放即将生成目标源代码,在protoc.exe同级目录再建立文件夹:DST_DIR。执行cmd命令:protoc -I=SRC_DIR --cpp_out=DST_DIR SRC_DIR/student.proto
即可在DST_DIR中看到你要的两个文件:
student.pb.h , 定义了 C++ 类的头文件
student.pb.cc , C++ 类的实现文件
到这里基本上没啥好说的了,使用生成的源文件就行了。
示例代码:
#include <iostream>
using namespace std;
#include "student.pb.h"
int main(int, char *[])
{
student data;
data.set_id(111);
data.set_name("zhuyongjin");
string s = data.SerializeAsString();//序列化方法继承自基类,有多个不同的序列化和逆序列化方法,这里仅以string为例
student data1;
cout<<data1.id()<<endl;
data1.ParseFromString(s);
cout<<data1.id()<<endl;
cout<<data1.name()<<endl;
cout<<"hello protobuf!"<<endl;
};
输出:
0
111
student_name
hello protobuf!
请按任意键继续. . .
本文介绍了一种利用Protobuf实现的混合语言数据标准。通过protobuf定义数据结构,并生成多种语言如C++, Java, C的类定义文件。该标准支持序列化与逆序列化的操作,使得不同语言间的数据交换变得简单高效。
724

被折叠的 条评论
为什么被折叠?



