【ハウツー】
XMLはもう不要!? Google製シリアライズツール「Protocol Buffer」
9 サンプルプログラム全容
2008/07/18
サンプルプログラム全容
Java向けソースコードに特化した内容ではあったが、Protocol Bufferについて一通り説明させていただいた。いかがだったであろうか。
最後に、今回使用したサンプル(修正後)を全て掲載する。読者の皆さんが、Protocol Bufferを理解するための一助になれば幸いである。
リスト: Persons2.proto(修正後のprotoファイル)
package mycom.journal;
option java_package = "jp.co.mycom.journal";
option java_outer_classname = "Persons";
option optimize_for = SPEED;
message Person {
message Name {
required string first_name = 1;
required string last_name = 2;
optional string middle_name = 3;
}
// 名前を表す。必須
required Name name = 1;
// 年齢を表す
optional int32 age = 2;
enum Gender {
MALE = 0;
FEMALE = 1;
}
optional Gender gender = 3 [default = MALE];
extensions 1000 to max;
}
// Person型を拡張し、「体重」フィールドを加える
extend Person {
optional int32 weight = 1000;
}
// RPCの戻り値として使用されるレスポンス
message HelloResponse {
required string message = 1;
}
// RPCサービスの定義
service HelloService {
rpc hello(Person) returns (HelloResponse);
}
リスト: ReadWritePerson2.java(拡張フィールドの読み書きに対応したサンプルプログラム)
import jp.co.mycom.journal.Persons;
import java.io.*;
import com.google.protobuf.ExtensionRegistry;
public class ReadWritePerson2 {
private static final String FILE_NAME = "person.data";
public static void main(String[] args) throws Exception {
// ファイルへの書き出し
Persons.Person.Builder shiraishiBuilder = Persons.Person.newBuilder();
Persons.Person.Name shiraishiName = Persons.Person.Name.newBuilder()
.setFirstName("白石")
.setLastName("俊平")
.build();
Persons.Person shiraishi = shiraishiBuilder
.setName(shiraishiName)
.setAge(30)
.setGender(Persons.Person.Gender.MALE)
.setExtension(Persons.weight, 65)
.build();
OutputStream out = new FileOutputStream(FILE_NAME);
shiraishi.writeTo(out);
out.close();
// ファイルからの読み込み
InputStream in = new FileInputStream(FILE_NAME);
ExtensionRegistry registry = ExtensionRegistry.newInstance();
registry.add(Persons.weight);
shiraishi = Persons.Person.parseFrom(in, registry);
in.close();
System.out.printf("名前:%s 年齢:%d 性別:%s 体重:%d%n",
shiraishi.getName(), shiraishi.getAge(),
shiraishi.getGender(),
shiraishi.getExtension(Persons.weight));
}
}
関連記事
- XMLよりもシンプル! Google、独自記述言語によるデータ交換ツールを公開[2008/7/9]
関連サイト
ヘッドライン
- Infineon、パワーMOSFETの第5世代シリーズを発表[20:20 6/30]エレクトロニクス
- キヤノン、半導体露光装置の事業体制を再編 - キヤノンMJと事業部門を統合[19:48 6/30]エレクトロニクス
- スナップショット機能を追加した「Firediff 0.2」発表[19:12 6/30]プログラミング
- 【レポート】Xilinx、10分でセットアップすることが可能なFPGA評価キットが登場[18:30 6/30]エレクトロニクス
- 【レポート】Altera、低消費電力とセキュリティを強化した「Cyclone III LS」を発表[17:30 6/30]エレクトロニクス
- 経済産業省とNASA、ASTER全球3次元地形データの配布を開始[17:25 6/30]サイエンス
- トレンドマイクロ、情報漏洩対策製品「Trend Micro LeakProof 5.0」を発売[17:16 6/30]セキュリティ
- Python 3.1登場 - 高速化と新型導入[16:14 6/30]プログラミング
- エルピーダが産業再生法の第1号に認定 - DBJによる300億円の割当増資が決定[15:46 6/30]エレクトロニクス
- OKI、サーバの監査業務を自動化するアプライアンスを発表[11:50 6/30]システム管理