分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
1、在.proto文件中定义消息格式2、使用protobuf编译器3、使用c++ api来读写消息0、为何使用protobuf?1、原始内存数据结构,可以以二进制方式sent/saved.这种方式需要相同的内存布局和字节序。2、以ad-hoc方式将数据项编码成一个简单字符串----比如,将4个int类型编码成"12:3:-23:67"。这种方式简灵活。适用于简单数据。3、将数据序列化为XML。这种方式很流行,因为xml可读性好,编码解码方便,性能也好。仅仅XML dom树比较复杂。protobuf可以很好的解决上述问题。你编写一个.proto文件来描述数据结构。protobuf编译器使用它创建一个类,使用二进制方式自动编码/解码该数据结构。生成的类提供getter/setter方法。最重要的是,protobuf支持在此基础上进行格式扩展。示例1、定义协议格式package tutorial; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; }该结构与c++或java很像..proto文件以包声明开始,防止名字冲突。简单类型:bool, int32, float, double, string.其它类型:如上述的Person, PhoneNumber类型可以嵌套。“=1”, “=2”标识唯一“tag”.tag数1-15需要至少一个字节。required: 必须设置它的值optional: 可以设置,也可以不设置它的值repeated: 可以认为是动态分配的数组google工程师认为使用required威害更大, 他们更喜欢使用optional, repeated.2、编译你的协议运行protoc 来生成c++文件:protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.protoprotoc -I=./ --cpp_out=./ ./addressbook.proto生成的文件为:addressbook.pb.h, addressbook.pb.cc3、protobuf API生成的文件中有如下方法:// name inline bool has_name() const; inline void clear_name(); inline const ::std::string& name() const; inline void set_name(const ::std::string& value); inline void set_name(const char* value); inline ::std::string* mutable_name(); // id inline bool has_id()