インストール
以下の公式ページからコンパイラをダウンロード。
https://developers.google.com/protocol-buffers/docs/downloads
READMEに従ってビルド。
$ ./configure $ make $ make check $ make install
IDLからJavaソースを自動生成
作業フォルダに移動して、gradleでプロジェクトを作成する。
gradle init --type java-library
protoファイルを書かないといけないらしいので書く。protoファイルは、いわゆるIDL(インターフェース記述言語)の一種。
$ cat protos/sample.proto package sample; option java_package = "com.kenjih.sample"; option java_outer_classname = "SampleProtos"; message Person { required string name = 1; required int32 age = 2; required string sex = 3; }
コンパイルして、IDLからjavaファイルを生成する。
$ protoc --java_out=src/main/java protos/sample.proto
なんか出来た。
$ find . -name "*.java" ./src/main/java/com/kenjih/sample/SampleProtos.java
ビルドする。
build.gradleに以下を追記。
apply plugin: 'application' mainClassName = 'com.kenjih.sample.Main' dependencies { compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.0.0' }
./gradlew buildでコンパイル。
BUILD SUCCESSFULとでればOK。
動作確認
動作確認用のコードを書いてみる。
package com.kenjih.sample; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import com.kenjih.sample.SampleProtos.Person; public class Main { public static void main(String[] args) throws IOException { Person.Builder builder = Person.newBuilder(); Person p = builder.setName("Taro").setAge(20).setSex("Male").build(); p.writeTo(new FileOutputStream("person.bin")); Person q = Person.parseFrom(new FileInputStream("person.bin")); System.out.println(q.toString()); } }
gradleから実行。
$ ./gradlew run name: "Taro" age: 20 sex: "Male"
serialize/deserializeが出来ていることを確認できた。
ついでにバイナリファイルの中身を確認してみる。
$ hexdump -C person.bin 00000000 0a 04 54 61 72 6f 10 14 1a 04 4d 61 6c 65 |..Taro....Male| 0000000eなるほど。
0 件のコメント:
コメントを投稿