0

假设我有以下 flatbuffer IDL 文件:

table Monster {
  mana:short = 150;
  inventory:[ubyte];  // Vector of scalars.
}

而且我想Monster在缓冲区中序列化一个由 2 个对象组成的数组。

显然,在序列化数据时可以为整个缓冲区创建以下内存布局:

ArrayOfUBytesForInventoryOfMonster1|ArrayOfUBytesForInventoryOfMonster2|Monster1Data|Monster2Data

这意味着现在所有inventory字段都位于一个连续的内存位置。

然而,在球场上也可以做到这一点mana吗?即我想用这个内存表示序列化我的对象:

ArrayOfUBytesForInventoryOfMonster1|ArrayOfUBytesForInventoryOfMonster2|Monster1ManaValue|Monster2ManaValue|Monster1Data|Monster2Data.

其效果是将所有“法力”值转换为内存中的原始数组。

可以用 Flatbuffers 做到这一点吗?似乎字段只能在对象本身启动后进行序列化

4

1 回答 1

0

两者都不会按照您指示的方式工作。像这样的标量字段mana始终在表中内联,因此永远不会与类似字段连续。甚至像这样的向量inventory也以大小字段为前缀,因此它们的元素不是连续的,即使它们可以相邻,因为它们不是内联的。

如果你想要连续的数据,你必须明确地写出这些值的单个向量。

于 2018-05-18T05:57:46.167 回答