问题标签 [flatbuffers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
462 浏览

python - flatc 是否验证给定 JSON 的 Flatbuffer 模式的必需字段?

我正在尝试使用 Flatbuffers,我可以使用 flatc 验证我的 JSON 响应与 Flatbuffer 模式。似乎 flatc 不检查必填字段是否存在?我是否遗漏了什么或者 flatc 没有验证给定 JSON 的 Flatbuffer 模式的必填字段?

0 投票
1 回答
1825 浏览

schema - Flatbuffers Schema:联合向量

我在尝试联合向量时遇到此错误

显然 flatbuffers 不支持联合向量。所以我需要另一种数据类型来解决我的问题。这是我的情况:

使用模型实体组件系统(ECS),我有 3 个实体和 3 个组件,这是结构

如果我可以使用联合向量,则架构看起来像这样

其中 Component[N] 是表。实际上我有一个没有联合向量的解决方案

但是当组件列表增加时,它变得难以管理。

对不起,我正在使用 ECS,这实际上是用于游戏开发的。但这与游戏无关,所以我认为这是提出此类问题的正确地方。

如何在没有联合向量的情况下解决这个问题并且比上述解决方案更好?

0 投票
1 回答
354 浏览

go - 动态 FlatBuffers 分隔符

我正在使用 flatbuffer 通过 unix 套接字发送二进制数据。我发送的 flatbuffer 是动态长度的。我面临的问题是,如何知道我必须为一张表读取多少字节。

发送时是否可以附加分隔符之类的东西,我可以用它来确定平面缓冲区的结尾。

当我尝试使用较小的尺寸时

如果读取大于 512 字节的 flatbuffer,则会导致失败。

当我通过增加缓冲区来阅读时,我无法找到阅读的结尾

0 投票
2 回答
425 浏览

java - FlatBuffer的零分配是Java实现吗?

我的 Java 应用程序将 Protobuf 消息存储在数据库中。该应用程序速度很快,但它可以变得更快,因为并非总是使用消息的所有部分,从而导致在不需要的数据上浪费 CPU 周期。此外,一些消息具有树状结构,导致分配的内存比我想要的要多。

在做了一些研究之后,FlatBuffers 似乎是一个不错的替代品,因为它声称它是零分配/零解析。但是,基准测试是针对 C++ 运行的。我的应用程序是用 Java 编写的。FlatBuffer 的 Java 实现是否仍然很快,是否仍然是零分配/零解析?

0 投票
1 回答
891 浏览

json - 在 Web 服务中使用 Flatbuffers 而不是 json 发布请求并接收响应?建议链接到这样的例子

我看过一些帖子,但没有得到这个用例的任何例子,这里是我提到的这个链接。我也读过一些博客,但都是徒劳的。

0 投票
1 回答
1162 浏览

javascript - 如何在 javascript 中使用现有的结构缓冲区构建 flatbuffers 消息

我正在向 Node.js 服务器中收到的消息发送 ack,并且我想将 messageId 回显给客户端。目前我正在将 messageId 从缓冲区解析为字符串并从字符串构建 ack。将 id 解析为字符串并返回是不必要的,但我无法直接使用 stuct 缓冲区构建 ack。

这就是 messageid 作为字符串传入时的工作方式。

我想将 messageId 作为直接从消息中获取的缓冲区传入

但我收到一个错误:“FlatBuffers:结构必须内联序列化。”

这是结构:

0 投票
2 回答
1407 浏览

c++ - c++ - protobuf vs rapidjson 数据格式

使用 rapidJSON,我能够将任何类型的数据(由 rapidJSON 支持)存储为键值。我可以在 protobuf 中这样做吗?如果是这样,怎么做?

我选择 protobuf 而不是 rapidJSON 的原因是它的速度(并且 rapidJSON 中的关键比较实际上是一个“字符串”比较,成本很高)。或者有什么替代方案吗?也许是平面缓冲区?

要求是针对 int 类型键存储任何类型的数据。比常规 json 更快的序列化/反序列化。

从 C++ 的角度寻找答案。

0 投票
1 回答
623 浏览

flatbuffers - 在 flatbuffer 中压缩数据结构会增加文件大小?

我试图通过为我拥有的最重复的结构创建一个压缩模式来优化我的 flatbuffer 大小(仅使用 20 LSB 位的整数并将它们切成 64 位字),结果不是我所期望的:文件大小增长了一点,而不是我期望的剧烈压缩,为什么我下面的 2 ulong + 1 uint 结构(第二种情况)比生成的文件中的显式结构(第一种情况)占用更多的空间?在我的示例中,使用显式结构的 2.4Mb 文件变成使用压缩结构的 2.6M....

显式结构,直接访问字段:

压缩结构,需要使用 20 位和 16 位掩码进行编码和解码:

0 投票
2 回答
660 浏览

c# - 使用 flatbuffers 从 C# 序列化到本机内存缓冲区

是否可以flatbuffers在 C# 中将对象序列化为本机(非托管)内存缓冲区?所以我想做这些步骤:

  1. 从本机内存分配本机内存缓冲区
  2. 在 C# 中创建对象并将它们序列化到分配的缓冲区中
  3. 将此内存缓冲区发送到 C++ 进行反序列化

我正在考虑 C# 中的一些自定义内存缓冲区分配器,或者以某种方式将内存缓冲区的所有权从 C# 转移到 C++。

一般来说,我想在从 C# 向 C++ 发送数据时避免复制内存,反之亦然。我希望这个内存缓冲区在 C# 和 C++ 之间共享。

我怎么做?

0 投票
1 回答
1135 浏览

flatbuffers - Flatbuffers flatc 模式编译器不生成文件

我正在尝试运行flatc -s test.idl但没有成功。这曾经可以工作,但是在更换笔记本电脑后,我无法再编译模式了。如果我故意破坏 test.idl,我会收到错误,但如果语法正确,它就会默默地失败。

test.idl 看起来像这样:

有任何想法吗?我可能正在运行不同版本的 flatc(目前是 1.7.0),有什么变化吗?