1

私はフラットバッファをグーグルするのは初めてです。

nodeJSを使用してWeb上で転送するために、オブジェクトの配列をシリアル化しようとしています。

最初に fbs ファイルを作成し、flatc でコンパイルします。

namespace MyAlcoholist;

table Drink {
 drink_type_name: string;
 drink_company_name: string;
 drink_brand_name: string;
 drink_flavor_type_name : string;
 liquid_color_type_name : string;
 liquid_color_is_transparent : bool;
 alcohol_vol : float;
 calories_for_100g : uint;
 global_image_id: ulong;
 drink_flavor_id: ulong;
}

root_type Drink;

コンパイラは というファイルを生成しましたdrink_generated.js

次に、Nodejs で次のユーティリティ モジュールを作成しました。

var flatbuffers = require('../js/flatbuffers').flatbuffers;
var builder = new flatbuffers.Builder(1);

var drink = require('../fbs/drink_generated').MyAlcoholist; // Generated by `flatc`.

function drinkArrayToIdl(drinkArray) {
drinkArray.forEach(function (element, index, array) {
    var drinkObj = element;
    drink.Drink.startDrink(builder);
    var drinkBrandName = builder.createString(drinkObj.drink_brand_name);
    var drinkCompanyName = builder.createString(drinkObj.drink_company_name);
    var drinkflavorTypeName = builder.createString(drinkObj.drink_flavor_type_name);
    var drinkTypeName = builder.createString(drinkObj.drink_type_name);
    var liquidColorTypeName = builder.createString(drinkObj.liquid_color_type_name);
    drink.Drink.addAlcoholVol(builder, drinkObj.alcohol_vol);
    drink.Drink.addCaloriesFor100g(builder,drinkObj.calories_for_100g);
    drink.Drink.addDrinkBrandName(builder,drinkBrandName);
    drink.Drink.addDrinkCompanyName(builder,drinkCompanyName);
    drink.Drink.addDrinkFlavorId(builder,drinkObj.drink_flavor_id);
    drink.Drink.addDrinkFlavorTypeName(builder, drinkflavorTypeName);
    drink.Drink.addDrinkTypeName(builder,drinkTypeName);
    drink.Drink.addGlobalImageId(builder,drinkObj.global_image_id);
    drink.Drink.addLiquidColorIsTransparent(builder,drinkObj.is_transparent);
    drink.Drink.addLiquidColorTypeName(builder,liquidColorTypeName);
    drink.Drink.endDrink(builder);
})
}

module.exports.drinkArrayToIdl=drinkArrayToIdl;

今はhttps://google.github.io/flatbuffers/flatbuffers_guide_tutorial.htmlに基づいていますでバッファを閉じてから、 でバッファbuilder.finish(var)をフェッチする必要がありbuilder.dataBuffer()ます。

どの var を提供する必要があるかを理解するのに問題がありますbuilder.finish(var)

endDrink()この関数が、バッファーを閉じるために呼び出すことができる変数を返すことはわかっていますが、それは 1 つの Drink に対してだけです。そのバッファに多くのオブジェクトを挿入できるようにしたい。

それは可能ですか?私はそれを正しくやっていますか?

この問題に関する情報をいただければ幸いです。

4

1 に答える 1