FlatBuffers 使用 Golang java 指引

[TOC]

定義 IDL 模型文件

FlatBuffers的模型接口定義文件后綴為 .fbs

fbs 語法

基礎(chǔ)語法

語句使用 ; 結(jié)尾
結(jié)構(gòu)體使用 {} 來限定
使用 [] 來指定一個(gè)自定義類型

范例

namespace com.my.event;
table Event{
    touch : [Touch];
}

table Touch{
    x : int(id: 0);
    y : int(id: 1);
}

root_type Event;

關(guān)鍵字

關(guān)鍵字 描述與用途
/// FlatBuffers中用 "http:///" 來表示注釋,且此注釋會(huì)帶入到生成的源碼文件中
namespace 模型目錄拗小,包結(jié)構(gòu)
table 模型類標(biāo)識(shí) 會(huì)生成對(duì)應(yīng)標(biāo)識(shí)的單個(gè)模型文件的類
bool short int float string 默認(rèn)數(shù)據(jù)類型關(guān)鍵字
enum 枚舉類數(shù)據(jù)定義
union 生成一個(gè)獨(dú)立的枚舉類
deprecated 指定deprecated,可以刪除掉此字段
priority 設(shè)定優(yōu)先權(quán)
root_type 其table生成的文件中,除Table中字段會(huì)生成相關(guān)函數(shù)外會(huì)另外生成GetRootAsXXX()的函數(shù)
required struct的每個(gè)字段都為required,table的每個(gè)字段都默認(rèn)都是optional,但可以指定為required
id 設(shè)置生成指定順序侣颂,要求這個(gè)table里面全部都寫上才生效
include 引入另一個(gè)fbs內(nèi)容

范例

namespace MyGame;
attribute "priority";
enum Color : byte { Red = 1, Green, Blue }
///union Any { Monster, Weapon, Pickup }
//union Any { Monster}
union Any { Monster, Weapon}
struct Vec3 {
  x:float;
  y:float;
  z:float;
}
/// 注釋
table Monster {
  pos:Vec3;
  mana:short = 150;
  hp:short = 100;
  name:string;
  friendly:bool = false (deprecated, priority: 1);
  inventory:[ubyte];
  color:Color = Blue;
  test:Any;
}
table Weapon {
  pos:Vec3;
  mana:short = 150;
}
root_type Monster;
root_type Weapon;

fbs 技巧

///直接嵌套struct
table Monster { pos:Vec3; ...}

/// 直接指定數(shù)據(jù)類型及默認(rèn)值
mana:short = 150;

/// 指定deprecated膀哲,可以刪除掉此字段
friendly:bool = false (deprecated, priority: 1);

/// 加id指定生成順序
mana:short = 150 (id: 3); 

///
 include "include_test1.fbs"; 形式,將其它.fbs文件嵌套進(jìn)來

如有加id,則table中所有字段都要加id才可通過

生成對(duì)應(yīng)語言的模型文件

使用 flatc 生成對(duì)應(yīng)語言的模型文件


  --cpp        -c Generate C++ headers for tables/structs.
  --go         -g Generate Go files for tables/structs.
  --java       -j Generate Java classes for tables/structs.
  --js         -s Generate JavaScript code for tables/structs.
  --csharp     -n Generate C# classes for tables/structs.
  --python     -p Generate Python files for tables/structs.
  --php           Generate PHP files for tables/structs.
flatc -g Test.fbs

自動(dòng)更新模型文件腳本

#!/usr/bin/env bash
rm -rf flatbuffer

mkdir -p flatbuffer/java
mkdir -p flatbuffer/go

cd flatbuffer/java
flatc -j ../SimulationEvent.fbs
cd ..
cd go
flatc -g ../SimulationEvent.fbs

更新腳本是一個(gè)范例,建議自己修改~

golang 項(xiàng)目中使用

安裝golang支持包

go get -u -v google/flatbuffers/go

golang官方使用Flatbuffers文檔 http://google.github.io/flatbuffers/index.html

或者 根據(jù)范例來使用

https://github.com/google/flatbuffers/tree/master/samples

java使用 (Android中也一樣)

引入依賴庫

dependencies {
  compile 'com.github.davidmoten:flatbuffers-java:1.3.0.1'
}

按照例子使用
https://github.com/google/flatbuffers/blob/master/samples/SampleBinary.java

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵萨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跨跨,更是在濱河造成了極大的恐慌潮峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勇婴,死亡現(xiàn)場(chǎng)離奇詭異忱嘹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耕渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拘悦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橱脸,你說我怎么就攤上這事础米。” “怎么了慰技?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵椭盏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吻商,道長(zhǎng)掏颊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮乌叶,結(jié)果婚禮上盆偿,老公的妹妹穿的比我還像新娘。我一直安慰自己准浴,他們只是感情好事扭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乐横,像睡著了一般求橄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葡公,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天罐农,我揣著相機(jī)與錄音,去河邊找鬼催什。 笑死涵亏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒲凶。 我是一名探鬼主播气筋,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旋圆!你這毒婦竟也來了宠默?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤臂聋,失蹤者是張志新(化名)和其女友劉穎光稼,沒想到半個(gè)月后或南,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孩等,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年采够,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肄方。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹬癌,死狀恐怖权她,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逝薪,我是刑警寧澤隅要,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站董济,受9級(jí)特大地震影響步清,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一廓啊、第九天 我趴在偏房一處隱蔽的房頂上張望欢搜。 院中可真熱鬧,春花似錦谴轮、人聲如沸炒瘟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疮装。三九已至,卻和暖如春粘都,著一層夾襖步出監(jiān)牢的瞬間斩个,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工驯杜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留受啥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓鸽心,卻偏偏與公主長(zhǎng)得像滚局,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子顽频,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,178評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理藤肢,服務(wù)發(fā)現(xiàn),斷路器糯景,智...
    卡卡羅2017閱讀 134,664評(píng)論 18 139
  • 今天嘁圈,周六,強(qiáng)于四節(jié)課蟀淮,累成狗最住,下午休息,本晚上也休息的怠惶,不過阿謝去看球賽涨缚,我?guī)退蛋嗔恕1緛聿咧危裉熘芰茈y調(diào)值班...
    堅(jiān)持進(jìn)步閱讀 272評(píng)論 0 0
  • 因剛看完的電影《拿起槍的簡(jiǎn)》(美國西部)而想起的到目前為止我看過的電影中最喜歡一部美國經(jīng)典老片《燃情歲月(Lege...
    路航唐LhT閱讀 369評(píng)論 0 0