- FlatBuffers 教程
- FlatBuffers - 首頁
- FlatBuffers - 簡介
- FlatBuffers - 模式
- FlatBuffers - 結構
- FlatBuffers - 表格
- FlatBuffers - 字串
- FlatBuffers - 數字
- FlatBuffers - 布林值
- FlatBuffers - 列舉
- FlatBuffers - 向量
- FlatBuffers - 結構體
- FlatBuffers - 聯合體
- FlatBuffers - 巢狀表格
- FlatBuffers - 預設值
- FlatBuffers - JSON 轉二進位制
- FlatBuffers - 二進位制轉 JSON
- FlatBuffers - 可變緩衝區
- FlatBuffers - 向後相容性
- FlatBuffers - 語言獨立性
- FlatBuffers 有用資源
- FlatBuffers - 快速指南
- FlatBuffers - 有用資源
- FlatBuffers - 討論
FlatBuffers - 語言獨立性
概述
到目前為止,我們一直在使用 Java 來序列化和反序列化電影院資料。但是,Google FlatBuffers 提供的關鍵特性之一是“語言獨立性”。在本章中,我們將瞭解如何使用 Java 進行序列化,並使用 Python 進行反序列化。
繼續我們從Flat Buffers - 字串章節中的劇院示例,以下是我們在本示例中使用的模式:
theater.fbs
namespace com.tutorialspoint.theater;
table Theater {
name:string;
address:string;
}
root_type Theater;
使用 Java 進行序列化
要使用 FlatBuffers,我們現在必須使用flatc二進位制檔案從這個“.fbs”檔案建立所需的類。讓我們看看如何做到這一點:
flatc --java theater.fbs
這將在當前目錄中的com > tutorialspoint > theater資料夾中建立一個Theater.java類。我們在應用程式中使用此類,類似於Flat Buffers - 模式章節中所做的那樣。
使用從 fbs 檔案建立的 Java 類
首先,讓我們建立一個寫入器來寫入劇院資訊:
TheaterWriter.java
package com.tutorialspoint.theater;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.google.flatbuffers.FlatBufferBuilder;
public class TheaterWriter {
public static void main(String[] args) throws FileNotFoundException, IOException {
// create a flat buffer builder
// it will be used to create Theater FlatBuffer
FlatBufferBuilder builder = new FlatBufferBuilder(1024);
int name = builder.createString("Silver Screener");
int address = builder.createString("212, Maple Street, LA, California");
// create theater FlatBuffers using startTheater() method
Theater.startTheater(builder);
// add the name and address to the Theater FlatBuffer
Theater.addName(builder, name);
Theater.addAddress(builder, address);
// mark end of data being entered in Greet FlatBuffer
int theater = Theater.endTheater(builder);
// finish the builder
builder.finish(theater);
// get the bytes to be stored
byte[] data = builder.sizedByteArray();
String filename = "theater_flatbuffers_output";
System.out.println("Saving theater to file: " + filename);
// write the builder content to the file named theater_flatbuffers_output
try(FileOutputStream output = new FileOutputStream(filename)){
output.write(data);
}
System.out.println("Saved theater with following data to disk: \n" + theater);
}
}
編譯專案
現在我們已經設定了讀取器和寫入器,讓我們編譯專案。
mvn clean install
序列化 Java 物件
現在,編譯後,讓我們先執行寫入器:
java -cp .\target\flatbuffers-tutorial-1.0.jar com.tutorialspoint.theater.TheaterWriter Saving theater to file: theater_flatbuffers_output Saved theater with following data to disk: 72
使用 Python 反序列化序列化物件
從 proto 檔案生成 Python 類
讓我們為 Theater 類生成 Python 程式碼:
flatc --python theater.fbs
執行此命令後,您會注意到在當前目錄中的com > tutorialspoint > theater資料夾中有一個自動生成的類Theater.py。此類將幫助我們反序列化劇院物件。
使用生成的 Python 類
現在,讓我們編寫資料的讀取器,它將使用 Java 讀取包含序列化物件的檔案:
theaterReader.py
import Theater
filename = "E:/theater_flatbuffers_output";
print("Reading from file: " + filename)
theater = Theater.Theater()
f = open(filename, "rb")
buf = f.read()
buf = bytearray(buf)
theater = theater.GetRootAs(buf);
f.close()
print("Name: " + theater.Name().decode("utf-8"))
print("Address: " + theater.Address().decode("utf-8"))
然後,讓我們執行讀取器。
py theaterReader.py Reading from file: E:/theater_flatbuffers_output Name: Silver Screener Address: 212, Maple Street, LA, California
因此,正如我們所看到的,Java 客戶端寫入的所有值都已正確反序列化並由我們的 Python 客戶端讀取,這有效地意味著 FlatBuffers 是語言獨立的。
廣告