- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个使用 Google FlatBuffers 的 NodeJs 应用程序。
我在我的 macbook pro 上安装了 flatc 并编译了以下架构:
命名空间 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;
}
table Drinks { drinks:[Drink]; }
root_type Drinks;
架构文件名为 Drink.fbs,它生成了一个名为 Drink_generate.js 的 JavaScript 文件
我将此文件包含在我的 Nodejs 应用程序中,并使用以下代码向其中添加数据。这是我的 flatBufferUtil.js 实用程序文件。
var flatbuffers = require('../js/flatbuffers').flatbuffers;
var builder = new flatbuffers.Builder();
var drinks = require('../fbs/drinks_generated').MyAlcoholist; // Generated by `flatc`.
function drinkArrayToBuffer(drinkArray) {
var drinksVectArray = [];
drinkArray.forEach(function (element, index, array) {
var drinkObj = element;
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);
drinks.Drink.startDrink(builder);
drinks.Drink.addAlcoholVol(builder, drinkObj.alcohol_vol);
drinks.Drink.addCaloriesFor100g(builder,drinkObj.calories_for_100g);
drinks.Drink.addDrinkBrandName(builder,drinkBrandName);
drinks.Drink.addDrinkCompanyName(builder,drinkCompanyName);
drinks.Drink.addDrinkFlavorId(builder,drinkObj.drink_flavor_id);
drinks.Drink.addDrinkFlavorTypeName(builder, drinkflavorTypeName);
drinks.Drink.addDrinkTypeName(builder,drinkTypeName);
drinks.Drink.addGlobalImageId(builder,drinkObj.global_image_id);
drinks.Drink.addLiquidColorIsTransparent(builder,drinkObj.is_transparent);
drinks.Drink.addLiquidColorTypeName(builder,liquidColorTypeName);
var drink = drinks.Drink.endDrink(builder);
drinksVectArray.push(drink);
})
var drinksVect = drinks.createDrinksVector(builder,drinksVectArray);
builder.finish(drinksVect);
var buf = builder.dataBuffer();
return buf;
}
module.exports.drinkArrayToBuffer=drinkArrayToBuffer;
现在,当我执行此函数时,它会失败并出现错误flatbuffers is not Defined
。
我调试了我的代码,发现它文件在以下代码行中:
drinks.Drink.addDrinkFlavorId(builder,drinkObj.drink_flavor_id);
如果我进入 addDrinkFlavorId 函数,我会在 Drinks_generted.js 中看到以下代码:
MyAlcoholist.Drink.addDrinkFlavorId = function(builder, drinkFlavorId) {
builder.addFieldInt64(9, drinkFlavorId, flatbuffers.Long.ZERO);
};
如您所见,它使用 flatbuffers.Long.ZERO
但该文件中根本没有定义 flatbuffers。编译没有提供任何错误,那么我错过了什么?
最佳答案
在我看来,这是一个错误...生成的文件似乎是根据 flatbuffers
要求独立存在的。但是,对于自定义 flatbuffers.Long
类,默认值 flatbuffers.Long.ZERO
会渗入生成的文件中。
虽然这并不是一个解决方案,但一种解决方法是手动将所需的 FlatBuffers 添加到生成的文件中;它很丑陋,但可能比在更合适的答案(或修复)出现之前被阻止要好。
// In `drinks_generated.js`
var flatbuffers = require('../js/flatbuffers').flatbuffers;
注意:
drinks.Drink.addDrinkFlavorId()
和 drinks.Drink.addGlobalImageId()
函数期望将 flatbuffers.Long
值传递给它们,因为它们在架构(fbs
文件)中被指定为 ulong
。因此,您需要确保您没有尝试传递简单的 number
类型。
例如:
var my_long = flatbuffers.Long(100, 0); // low = 100, high = 0
drinks.Drink.addDrinkFlavorId(builder, my_long);
因此,另一种可能的解决方法是更改架构中这些字段的数据类型,以避免使用 ulong
,直到更清楚这里发生的情况为止。
附注我非常确定该代码段第 30 行上的 drinks.createDrinksVector
应该是 drinks.Drinks.createDrinksVector
。
关于javascript - FlatBuffers 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486130/
假设我有以下 Flatbuffers 架构文件: union WeaponProperties { sword: PSword, axe: PAxe, mace:
我正在考虑使用 flatbuffers 的序列化 struct 作为键值存储中的键。这是我想在 rocksdb 中用作键的 struct 示例。 struct Foo { foo_id: int6
我们有以下场景: 我们正在仅允许静态内存分配 的环境中构建 FlatBuffers 应用程序。 我们传入的 FlatBuffers 包含软件更新图像,这些图像比我们在处理单元上的整个可用 RAM 还要
FlatBuffer 是否允许将二进制 fbs 文件与 JSON 相互转换(当然模式是已知的)? 我的想法是在 FlatBuffer 中定义管道和过滤器架构的结构模式。 FlatBuffer 文件也将
有没有办法将 JSON 模式转换为 Flatbuffer 模式? 这里的用例是用户可以创建 JSON 模式,但我正在寻找一种将 JSON 模式转换为 Flatbuffer 的方法。 示例:输入 {
我是 flatbuffer 的新手,我想知道是否可以完全(不是 const*)访问 flatbuffers::Vector 中的数据。看看下面的例子,我想窃取 img2::mem::data 的所有权
我引用了一些 examples我正在用 server 为我的系统建模和 client例子,我觉得我很亲近。 StarBuffer.fbs: 表 StarBuffer { 半径:双; 质量:双; 体积:
为后代发布我的作品。在用 C++ 完成我的最后一个示例后意识到我实际上需要一直用 C 来完成它(太棒了,对吧?)。作为一名 Java 程序员,这两次迭代都花费了我相当多的精力,我认为那里的许多示例代码
我有一个 3 层嵌套的 Java POJO,在模式文件中看起来像这样: struct FPathSegment { originIata:ushort; destinationIata
我正在检查 Flatbuffers 以实现通信协议(protocol)。当收到一条消息时,在我的例子中它可能包含许多不同的表。如果我理解正确,在 Flatbuffers 中实现此目的的方法是使用一个“
如果两个对象的模式中的表从相似的数据类型开始,是否有任何方法可以使用 flatbuffer 验证器验证其中具有 flatbuffer 结构的 bytearray? 示例模式: table AddTas
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我的 C++ 应用程序的当前工作如下: 1.它涉及启动另一个进程并使用windows共享内存在两个进程之间进行通信。 2.数据在一个进程中序列化,在另一个进程中反序列化。但是,数据类型也可能根据用户输
我正在编写一个使用 Google FlatBuffers 的 NodeJs 应用程序。 我在我的 macbook pro 上安装了 flatc 并编译了以下架构: 命名空间 MyAlcoholist;
我最近一直在研究 FlatBuffers 库。我正在寻找评估它以用于我的项目。看着flatbuffers.h ,我想知道是否违反了strict-aliasing rule如果它确实考虑了严格的别名,有
我正在尝试使用 FlatBuffers 来存储 OpenStreetMap 数据。所以,这将是 50GB。 由于通常所有内容都保存在内存中,怎么可能(如果有的话)按顺序将数据写入文件? 我觉得这不是
我对 C++ 和 Google 中的文件流有基本的了解 FlatBuffers . Schema文件很简单,同样是创建缓冲区和读取从缓冲区指针。我不明白的是如何将多个缓冲区保存到一个二进制文件中,然后
我有一个使用谷歌 FlatBuffers 的 nodejs 应用程序。 饮料模式的 fbs 文件: namespace MyAlcoholist; table Drink { drink_type_n
问题 在尝试访问缓冲区的一部分时,flatbuffers 生成的服务器文件反复出现崩溃(紧急情况:运行时错误: slice 边界超出范围)(使用 flatbuffers 创建),其中包含从一个客户端流
我正在使用 node.js 制作在线游戏,并尝试在游戏服务器上保存游戏重播。我正在使用 FlatBuffers 来序列化客户端-服务器通信的数据,并且我认为将游戏的状态逐帧保存在文件中会很酷。 我在
我是一名优秀的程序员,十分优秀!