Carpe Diem

  Top > スポンサー広告> FlatBuffers > FlatBuffers を使ってみる  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FlatBuffers を使ってみる

2014 - 08/15 [Fri] - 23:51

FlatBuffers は ProtocolBuffers の後継として Google が開発したシリアライズライブラリです。
GooglePlay にも使われているそうです。

◆事前準備
必要なパッケージをインストールしておきます。

$ sudo aptitude install g++ cmake

ファイルをダウンロードしてきます。

$ git clone https://github.com/google/flatbuffers.git
$ cd flatbuffers/

◆ビルド&インストール

$ cmake -G "Unix Makefiles"
$ make
$ sudo make install


◆スキーマの作成
IDLファイルは *.fbs のファイル名で作成します。
hoge.fbs
namespace Hoge;

table User {
id:short;
name:string;
email:string;
}

root_type User;

今回はGo言語で試そうと思います。ここの table が構造体に値すると考えると楽です。
IDLにも struct はありますが、中身に struct と数値しか使えなかったです。代わりにメモリの使用が少ないらしいです。Vector などお決まりの構造体に使うといいと思います。

使える型の一覧はこちらです。
Writing a schema


◆コンパイルする

$ flatc -g hoge.fbs

すると以下のようなファイルが生成されます。

$ tree
.
├── Hoge
│   └── User.go
├── hoge.fbs
└── test.go

※test.go は動作確認するための実行ファイルです。
この生成されたファイルに定義されているメソッドを使っていきます。


◆動作確認
go の flatbuffers のパッケージをインストールしておきます。

$ go get github.com/google/flatbuffers/go

test.go を以下のように作成します。
package main

import (
"fmt"

"github.com/google/flatbuffers/go"

"./Hoge"
)

func main() {
// write
builder := flatbuffers.NewBuilder(0)
Hoge.UserStart(builder)
Hoge.UserAddId(builder, 10)
name := builder.CreateString("Amami Haruka")
Hoge.UserAddName(builder, name)
email := builder.CreateString("haruka_amami@namco.com")
Hoge.UserAddEmail(builder, email)
u := Hoge.UserEnd(builder)
builder.Finish(u)

// builder.Bytes are buffers which you can send or receive from somewhere(disk, network).

// read
user := Hoge.GetRootAsUser(builder.Bytes, builder.Head())
fmt.Println("id: ", user.Id())
fmt.Println("Name: ", user.Name())
fmt.Println("Email: ", user.Email())
}

上のコードを見ると分かるのですが、いわゆるシリアライズやデシリアライズの処理がないです。
最初からバッファありのインスタンスを作り、そこに flatc でコンパイルして生成したファイルにある専用のメソッドで値をセット・ゲットしていくため「パッキング/アンパッキングなしで、シリアライズされたデータにアクセス」ということなのでしょう。

実行してみます。

$ go run test.go
id: 10
Name: Amami Haruka
Email: haruka_amami@namco.com

きちんと取得出来ました。

ソース:
FlatBuffers - Building
Google、FlatBuffersをオープンソース化: 効率の良いクロスプラットフォームのシリアライゼーションライブラリ

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。