protocol bufferはgoogleが作った、構造化データのシリアライズ方式。以下の特徴がある。
- XMLより簡単で早い
- 生バイトでやるとポービリティ問題になるが、それが大丈夫
- IDLみたいだがIDLより簡単
使い方
最初に.protoファイルを作る。このファイルにデータ構造を定義する。例えば以下のようになる(googleより引用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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; } |
これをコンパイラ(protoc)を使ってコンパイルする。コンパイルの生成物はC++やJavaのクラスとなる。C++の場合出来上がったファイルをコンパイルするにはprotocol bufferのヘッダファイルやライブラリが必要になる。
protocol bufferで提供さているファイル一式にはVisual C++の.slnファイルが含まれているので、これをVC+ 2005 Express Editionなどで開けばライブラリをビルドできる。
コードのビルド時、libprotobuf.libを読み込ませる必要があり、実行時にはlibprotobuf.dllが必要になる。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include "person.pb.h" int main() { Person person; person.set_name("opoona"); person.set_id(100); int size = person.ByteSize(); unsigned char* data = new unsigned char[size]; if(!person.SerializeToArray(data, size)) return -1; Person person2; if ( !person2.ParseFromArray(data, size) ) return -1; std::cout << person2.name() << std::endl; std::cout << person2.id() << std::endl; delete data; return 0; } |
上記ソースを実行するとPersonのdtorでエラーが出る。読みきれなかったのでスルー。