FlatBuffers學習筆記

一.什麼是FlatBuffers

FlatBuffers是Google開發的一個開源的,跨平臺的,高效的,提供
C++/Java/Go/C#接口支持的序列化工具庫。

Github上的代碼託管地址: https://github.com/google/flatbuffers

項目介紹主頁: http://google.github.io/flatbuffers/index.html

二.FlatBuffers的優點

1.對序列化數據的訪問不需要打包和拆包—-它將序列化數據存儲在緩存中,這些數據既可以存儲在文件中,又可以通過網絡原樣傳輸,而沒有任何解析開銷;

2.內存效率和速度——訪問數據時的唯一內存需求就是緩衝區,不需要額外的內存分配。 這裏可查看詳細的.

3.擴展性、靈活性——它支持的可選字段意味着不僅能獲得很好的前向/後向兼容性

4.最小代碼依賴——僅僅需要自動生成的少量代碼和一個單一的頭文件依賴,很容易集成到現有系統中。再次,看基準部分細節;

5.強類型設計——儘可能使錯誤出現在編譯期,而不是等到運行期才手動檢查和修正;

6.使用簡單——生成的C++代碼提供了簡單的訪問和構造接口;而且如果需要,通過一個可選功能可以用來在運行時高效解析Schema和類JSON格式的文本;

7.跨平臺——支持C++11、Java,而不需要任何依賴庫;在最新的gcc、clang、vs2010等編譯器上工作良好;

三.如何在Android中使用FlatBuffers

  • 將JSON數據在應用外的某一個地方轉換成FlatBuffers格式的數據,(比如:將二進制數據以文件的形式提交,還可以從API直接返回FlatBuffer二進制文件)
  • 在flatc(FlatBuffers編輯器)的幫助下,手動生成數據模型。(Java類)
  • JSON文件存在一定的侷限性(比如不能使用null字段,日期格式被認爲是字符串類型)

總結:

什麼使得Flatbuffers如此奏效?

  • 由於是以二進制形式緩存,訪問序列化數據時也無需數據解析過程。
  • Flatbuffers數據不需要分配比自身使用緩衝區還要多的內存。我們不必像在JSON中那樣爲解析數據的整個層次分配額外對象。
  • 正是利用自身特殊的編碼格式,能一定程度上減少內存的佔用,優化讀取的性能。更重要的是,對於數據結構的向前向後兼容提供了很好的擴展性,方便又高效:要想讓數據結構具有可擴展性,需將數據結構定義爲table,它是數據擴展的基礎,FlatBuffers中的struct類型不支持擴展
  • 如果想在後續的版本中刪除數據結構中的某些字段,只要在將要刪除的字段後面添加(deprecated)即可,當然需要保證刪除的字段在之前版本的程序中不會引起程序崩潰(該刪掉的字段在上一版本的程序中獲取到的會是個空指針或空值,只需保證程序在獲取到空值或空指針之後不會出現異常即可
  • 如果想在後續版本中向數據結構中添加某些字段,需添加到table中最後一個字段的後面,若是想table中隨意位置添加字段,需如上面TextureData 的定義,給每個字段指明添加id:n(n從0開始)

參考:

http://www.csdn.net/article/2015-08-31/2825579
http://www.jianshu.com/p/6eb04a149cd8
https://google.github.io/flatbuffers/index.html

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章