2009年1月10日土曜日

Google Protocol Buffers(Java)を試してみる

XMLより良いのかしら?ということでプロトコル バッファのサンプル(Java)をやってみたので書いておく.

0.ダウンロード(protobuf-2.0.3.tar.gz),展開
 http://protobuf.googlecode.com/files/protobuf-2.0.3.tar.gz
 展開してprotobuf-2.0.3を得る.

1.とりあえずインストール
.protoファイルから対応する.javaをつくるためのツールをインストールする.
インストール先が/usr/local/binでよければ
> cd protobuf-2.0.3
> ./configure
> make
> make check
> sudo make install


2.examplesのjavaサンプルからコードの作成
> cd examples
> protoc --java_out=. addressbook.proto

これでjavaファイルが一つできる.
> ls  com/example/tutorial/AddressBookProtos.java 
com/example/tutorial/AddressBookProtos.java


3.Eclipseで作業
で道具がそろったのでEclipseを立ち上げる.
Java Projectを作る(今回はProtoBufとした).
で以下をインポート.
protobuf-2.0.3/examples/AddPerson.java
protobuf-2.0.3/examples/ListPeople.java
protobuf-2.0.3/examples/com/example/tutorial/AddressBookProtos.java
protobuf-2.0.3/java/src/main/java/com/google/protobuf/*.java

Package Explorerはこんな感じにになる.


4.実行について
AddPerson.javaでRunしてみる.
Usage: AddPerson ADDRESS_BOOK_FILE

引数を設定しろってことで今のRunでできているRun/Run Configurationsダイアログ中のJava Application/AddPersonのArgumentsに設定する.(とりあえずaddress_book_file.protoとした(これだと定義ファイルと同じ拡張子なのであまり良くない.けど画像との都合でそのままにしときます.))

で,Runしてみる.

色々入力してみる.

終了後,Eclipse側でみるにはPackage Explorerのプロジェクト名(ProtoBuf)を選択後,File/Refreshしてみれば良い.ファイルができていると思う.
ListPeople.javaも同様にしてRun.


5.中身.
> cd /path/to/workspace/ProtoBuf
> ls address_book_file.proto
address_book_file.proto

中身はこんな感じ.


って感じ.

ちなみにprotocにかけたaddressbook.protoファイルの中身はこういう感じ.
package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person {
required string name = 1;
required int32 id = 2; // Unique ID number for this person.
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;
}

// Our address book file is just one of these.
message AddressBook {
repeated Person person = 1;
}


どうなんだろうね.
まぁ再度コイツにリンクしておくけど.
オブジェクトはネットワークに流せない. 流せるのはメッセージだけだ


間違い等あればコメントいただければ幸いです.

0 件のコメント: