Search on the blog

2016年8月11日木曜日

Apache Thriftを使ってみた

前回のProtocol Buffersに続いて、Thriftを使ってSerialize/Deserialize処理を書いてみた。

インストール
OS Xの場合は、homebrew一発。
$ brew install thrift

サンプルプロジェクトの作成
Javaでサンプルを書くので、gradleプロジェクトを作っておく。

$ gradle init --type java-library

build.gradleに 以下を追記。
apply plugin: 'application'
mainClassName = 'Main'
compile group: 'org.apache.thrift', name: 'libthrift', version: '0.9.3'

IDLファイルの記述
以下のようなthrift IDLを書いて、sample.thriftというファイル名でプロジェクト直下に保存。
namespace java sample

struct Person {
  1: string name,
  2: i32 age,
  3: string sex
}

thriftコンパイラを使って、IDLからソースファイルを自動生成。
thrift --gen java -out src/main/java sample.thrift

ファイルが作成されたことを確認。
$ find . -name "Person.java"
./src/main/java/sample/Person.java

サンプル
サンプル実行ファイルを書く。
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.TSerializer;
import org.apache.thrift.TDeserializer;

import sample.Person;

public class Main {
  public static void main(String[] args) throws TException {
    // serialize
    Person p = new Person("taro", 20, "male");
    TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
    byte[] bytes = serializer.serialize(p);

    // deserialize
    TDeserializer deserializer = new TDeserializer(new TBinaryProtocol.Factory());
    Person q = new Person();
    deserializer.deserialize(q, bytes);
    System.out.println("Deserialized object: " + q);
  }
}

実行してみる。
$ ./gradlew run
Deserialized object: Person(name:taro, age:20, sex:male)
ちゃんと動いた!

0 件のコメント:

コメントを投稿