如何将javascript数组序列化到google平面缓冲区?
我是谷歌平板缓冲区的新手 我正在尝试序列化一个对象数组,以便使用nodeJS在web上传输它 首先,我创建了一个fbs文件,并使用flatc进行编译:如何将javascript数组序列化到google平面缓冲区?,javascript,node.js,flatbuffers,Javascript,Node.js,Flatbuffers,我是谷歌平板缓冲区的新手 我正在尝试序列化一个对象数组,以便使用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_
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\u 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;
现在我需要使用builder.finish(var)
关闭缓冲区,然后使用builder.dataBuffer()
获取缓冲区
我在理解需要向builder.finish(var)
我知道函数endDrink()
返回一个变量,我可以调用该变量来关闭缓冲区,但它只用于一杯饮料。我希望能够向该缓冲区插入许多对象
可能吗?我做得对吗
非常感谢您提供有关此问题的任何信息。添加一个
桌上饮料{Drinks:[Drink];}
并将其设置为新的根目录类型
。然后收集向量中endDrink
的所有返回值,并用它创建一个Drinks
表
另外,将所有调用移到
startDrink
之前的createString
,因为对象不应嵌套。添加一个表饮料{Drinks:[Drink];}
,并将其设为新的根类型
。然后收集向量中endDrink
的所有返回值,并用它创建一个Drinks
表
另外,将所有调用移动到createString
之前的startDrink
,因为对象不应嵌套