Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript数组序列化到google平面缓冲区?_Javascript_Node.js_Flatbuffers - Fatal编程技术网

如何将javascript数组序列化到google平面缓冲区?

如何将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_

我是谷歌平板缓冲区的新手

我正在尝试序列化一个对象数组,以便使用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\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
,因为对象不应嵌套