- FlatBuffers 教程
- FlatBuffers - 首頁
- FlatBuffers - 簡介
- FlatBuffers - 模式 (Schema)
- FlatBuffers - 結構
- FlatBuffers - 表格
- FlatBuffers - 字串
- FlatBuffers - 數字
- FlatBuffers - 布林值
- FlatBuffers - 列舉
- FlatBuffers - 向量
- FlatBuffers - 結構體
- FlatBuffers - 聯合體
- FlatBuffers - 巢狀表格
- FlatBuffers - 預設值
- FlatBuffers - JSON 轉二進位制
- FlatBuffers - 二進位制轉 JSON
- FlatBuffers - 可變緩衝區
- FlatBuffers - 向後相容性
- FlatBuffers - 語言無關性
- FlatBuffers 有用資源
- FlatBuffers - 快速指南
- FlatBuffers - 有用資源
- FlatBuffers - 討論
FlatBuffers - 簡介
在我們深入瞭解 FlatBuffers 之前,讓我們先簡要了解一下序列化,這是 FlatBuffers 所做的工作。
什麼是序列化和反序列化?
每當我們需要將物件狀態持久化到記憶體系統時,都需要序列化。在序列化中,我們將物件轉換為位元組,並將這些位元組儲存在記憶體系統中。這些儲存的位元組隨後可以反序列化以恢復物件狀態。由於我們將物件轉換為位元組,因此它可以儲存在任何地方,包括檔案系統、訊息佇列、資料庫等等,然後我們可以將這些位元組傳輸到不同的機器並檢索物件狀態。
為什麼我們需要序列化和反序列化?
序列化有助於持久化物件狀態,然後我們可以將其傳輸到網路上的任何位置。接收後,我們可以反序列化物件,或者換句話說,我們可以隨時在不同的機器上從位元組中恢復我們的物件。這是序列化和反序列化許多重要用例之一。另一個重要的用例是需要透過網路傳輸物件的情況。訊息佇列、資料庫物件、REST API 都基於此原理。在這種情況下,傳送方首先對物件進行序列化,然後將其傳輸到接收方。接收方然後反序列化已序列化的物件。
在 REST API、微服務架構中,應用程式通常被分解成小的服務,這些服務透過訊息佇列和 API 相互通訊。由於通訊是在網路上進行的,需要頻繁地將物件轉換為位元組,然後再轉換回物件。因此,序列化和反序列化在分散式環境中變得非常關鍵。
為什麼選擇 FlatBuffers?
Google FlatBuffers 執行將物件序列化和反序列化為位元組的操作,這些位元組可以傳輸到網路上。但是也有一些其他的庫和機制也可以傳輸資料。
那麼,是什麼讓 FlatBuffers 特別呢?以下是一些重要的特性:
語言無關性 - FlatBuffers 編譯器可以為許多語言建立程式碼,例如 Java、Python、Go、C、C++ 等。因此,Java 物件可以由 Java 程式序列化為位元組,並可以反序列化為 Python 物件,反之亦然。
高效的資料壓縮 - FlatBuffers API 最初是為遊戲環境和效能關鍵型系統開發的,其設計考慮了資料壓縮和效能。它非常節省記憶體,甚至比 Google Protocol Buffers(另一個 Google 序列化和反序列化庫)更快。
向後和向前相容性 - FlatBuffers 架構同時具有向後和向前相容性。FlatBuffers 的模式支援在較新程式碼中新增更改,並允許棄用較舊的更改而不會破壞向後相容性。
易於使用 - FlatBuffers 庫自動生成序列化程式碼(我們將在接下來的章節中看到),具有版本控制方案,以確保資料建立者和資料使用者可以具有序列化定義的不同版本等。
JSON 可轉換 FlatBuffers 模式檔案可以轉換為 JSON 檔案,同樣,我們可以使用 FlatBuffers 模式轉換 JSON 檔案。
FlatBuffers 與其他方法的比較 (XML/JSON/Java 序列化)
讓我們看看其他透過網路傳輸資料的方法與 FlatBuffers 相比如何。
| 特性 | FlatBuffers | JSON | XML |
|---|---|---|---|
| 語言無關性 | 是 | 是 | 是 |
| 序列化資料大小 | 三者中最少 | 小於 XML | 三者中最大 |
| 人類可讀性 | 否,因為它使用單獨的編碼模式 | 是,因為它使用基於文字的格式 | 是,因為它使用基於文字的格式 |
| 序列化速度 | 三者中最快 | 比 XML 快 | 三者中最慢 |
| 資料型別支援 | 比其他兩者更豐富。支援複雜的資料型別,例如 Any、oneof 等。 | 支援基本資料型別 | 支援基本資料型別 |
| 對演變模式的支援 | 是 | 否 | 否 |