安装protobuf
从https://github.com/protocolbuffers/protobuf下载protobuf,解压、进入,执行:
./configure
make
make check
make install
安装时遇到的问题
问题一
./configure报错:./include/gtest/internal/gtest-port.h:428:10: fatal error: ‘tr1/tuple’ file not found

解决方法
进入解压后的protobuf2.4.1目录,输入命令【./autogen.sh】生成configure文件
然后执行./configure CPPFLAGS=-DGTEST_USE_OWN_TR1_TUPLE=1
问题二
make时报错:google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template

解决方法
编辑目录下的文件./src/google/protobuf/message.cc,添加头文件#include <istream>

定义.proto文件
person.proto:
option java_package = "com.bbllbb";
option java_outer_classname = "PersonEntity";
message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3;
}
使用protoc编译
protoc person.proto --java_out=../java
至此,由person.proto文件得到了一个PersonEntity.java的java文件,
生成的java文件顶部有标注:// Generated by the protocol buffer compiler. DO NOT EDIT! // source: person.proto,主要关注PersonEntity内部有一个Person类,该Person类有自己的builder
使用生成的java类
测试生成的java类,模拟序列化和反序列化的过程。
public class Test {
public static void main (String[] args) {
//模拟将对象转成byte[],方便传输
PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
builder.setId(1);
builder.setName("ant");
builder.setEmail("ghb@soecode.com");
PersonEntity.Person person = builder.build();
System.out.println("before :"+ person.toString());
System.out.println("===========Person Byte==========");
for(byte b : person.toByteArray()){
System.out.print(b);
}
System.out.println();
System.out.println(person.toByteString());
System.out.println("================================");
//模拟接收Byte[],反序列化成Person类
byte[] byteArray =person.toByteArray();
PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
System.out.println("after :" +p2.toString());
}
}
运行结果:

参考:
https://www.cnblogs.com/meitian/p/5791042.html
https://blog.youkuaiyun.com/zhangyuehuan/article/details/51226066
https://blog.youkuaiyun.com/antgan/article/details/52103966
本文介绍了protobuf的安装过程,包括解决配置时遇到的问题,如缺失`tr1/tuple`头文件和`message.cc`中模板未定义的问题。接着讲解了如何定义.proto文件并使用protoc编译,生成的Java类包含Person类及其Builder。最后,文章提到了如何测试和使用这些生成的类进行序列化和反序列化的操作。
518

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



