【问题标题】:Is there a way to read/write multiple structures or lines using Flatbuffers?有没有办法使用 Flatbuffers 读取/写入多个结构或行?
【发布时间】:2019-10-14 17:44:36
【问题描述】:

我使用 Flatbuffers 作为存储数据和元标记与数据的一种方式。我正在使用 Python,为了模拟字典,我有两个表结构:一个用于字典条目,一个用于保存条目向量。这是架构的示例:

// Define dictionary structure

table tokenEntry{
  key:string;
  value:int;
}

table TokenDict{
  Entries:[tokenEntry];
}

root_type TokenDict;

我希望使用 Flatbuffers 将两个字典写入一个文件。我还想从文件中一次读取一个字典,而不是同时将它们加载到内存中。我可以将两者都写入文件,一次一个。但是,当我从文件中读取时,我会同时获得两个结构。缓冲区保存文件中的所有数据。这不是我想要的,因为稍后我将在文件中拥有大量数据。有没有办法一次只读一个?

例如,如果我要使用 pickle 结构,我可以将多个 pickle 写入一个文件,然后一次读回一个。我希望对 Flatbuffers 做同样的事情。

谢谢。

【问题讨论】:

    标签: python-3.x file-io flatbuffers


    【解决方案1】:

    最好将文件写成一系列单独的 FlatBuffers,每个 FlatBuffers 都以大小为前缀。您可以在 Python 中使用 FinishSizePrefixed 执行此操作(请参阅 builder.py)。

    【讨论】:

    • 这很有帮助。谢谢你。是否有专门用于处理大小前缀缓冲区的文档?我相信我已经编写了一系列单独的平面缓冲区。现在我正在尝试从文件中读取它们。我可以使用 util.GetSizePrefixed(buf, offset) 获取当前正在读取的 flatbuffer 的大小。有没有一种简单的方法可以使用该大小来获取类似于 GetRootAsMonster() 的数据?
    • @webneko 是的,看起来没有简单的功能。简单的答案是将4 的偏移量传递给通常的GetRoot 函数,因为普通缓冲区直接启动大小后。不过,如果有它的功能会很好.. 随时在 github 上提出问题或更好,PR
    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多