protobuf 生成类
生成的类中包含各个字段的get和set接口,使用SerializeToString可将class实例转换为protobuf二进制数据,ParseFromArray函数可将protobuf二进制反序列化到类的实例中。
message 消息体
message 表示一个消息体, 相当于一个类。每个message中都有对应的变量, 每个变量有个对应的编号, 每个message内不同变量的编号不能重复。新版本的protobuf没有了required, optional等说明关键字, 都默认为optional。
整形变量
void clear_ret();
::google::protobuf::int32 ret() const;
void set_ret(::google::protobuf::int32 value);
自定义类类型
bool has_user_info() const;
void clear_user_info();
const ::pt::obj_user_info& user_info() const;
//自定义类型,并没提供set方法,而是通过mutable_接口返回user_info的指针,可根据此指针进行赋值操作
::pt::obj_user_info* mutable_user_info();
//返回user_info字段指针,将所有权移交给此指针,并将user_info字段置为empty状态
::pt::obj_user_info* release_user_info();
//使用set_allocated要小心,传入的参数需要显示allocate,设置后函数内部维护此指针
void set_allocated_user_info(::pt::obj_user_info* user_info);
repeated的类数组类型
int record_size() const;
void clear_record();
//根据id索引,返回记录的引用,const不可修改内容
const ::pt::obj_user_game_record& record(int index) const;
//根据id索引,返回记录的指针,以供查看、修改
::pt::obj_user_game_record* mutable_record(int index);
//repeated类型提供add接口增加一条记录,并返回此记录的指针,以便对其赋值
::pt::obj_user_game_record* add_record();
//提供mutable接口,并返回record字段的容器指针,可根据此指针遍历、修改
::google::protobuf::RepeatedPtrField< ::pt::obj_user_game_record >* mutable_record();
//返回record字段的容器引用,const不可修改内容
const ::google::protobuf::RepeatedPtrField< ::pt::obj_user_game_record >& record() const;
Android 使用
1、创建proto文件,定义消息的实体结构
2、编译proto文件生成对应的java文件
3、添加protobuf-java-2.5.0.jar到android工程
4、在android中实现对消息结构的序列化/反序列化